Flair工具使用教程

  • 教程三: 如何使用词向量

  • 教程地址:https://github.com/zalandoresearch/flair/blob/master/resources/docs/TUTORIAL_3_WORD_EMBEDDING.md

  • Flair提供了很多Class,可以通过很多方法获得词/句子嵌入。

  • 单词嵌入类都继承自TokenEmbeddings类,并实现embed()方法,您需要调用该方法来嵌入文本。

  • 生成的所有嵌入都是Pytorch向量,因此它们可以立即用于训练和微调。


词向量(词嵌入)

  • Classic Word Embeddings
    经典的单词嵌入是静态的和单词级的,这意味着每个不同的单词只能获得一个预先计算的嵌入。 大多数词嵌入都属于这一类,包括流行的GloVe或Komnios嵌入。

提供了很多预训练词向量,目前支持以下嵌入:
在这里插入图片描述

  • Contextual String Embeddings
    上下文字符嵌入是一类强大的词嵌入,能够更好的捕获潜在的语法语义信息。 主要区别在于:
  1. 它们在没有任何明确的单词概念的情况下进行训练,从而从根本上将单词建模为字符序列。
  2. 它们通过其周围文本进行语境化,这意味着相同的单词将根据其上下文使用而具有不同的嵌入。

您可以通过将字符串传递给CharLMEmbeddings类的构造函数来选择加载的嵌入。 目前,提供了以下Contextual String Embeddings:
在这里插入图片描述

  • Character Embeddings
    一些嵌入 - 例如字符特征 - 不是预先训练的,而是在下游任务上训练。 通常,这需要您实现分层嵌入体系结构。有了Flair,你不必担心这些事情。 只需选择适当的嵌入类,然后在下游任务培训期间自动训练字符特征。

  • Stacked Embeddings
    Stacked Embeddings(堆叠嵌入)是此库中最重要的概念之一。 您可以使用它们将不同的嵌入组合在一起,例如:

  1. 如果您想要将传统嵌入与上下文嵌入嵌入一起使用。
  2. 堆叠嵌入允许您混合和匹配。 我们发现嵌入的组合通常会产生最佳效果。
  3. 您需要做的就是使用StackedEmbeddings类并通过传递您希望组合的嵌入列表来实例化它。

Flair实战

Classic Word Embeddings

from flair.embeddings import WordEmbeddings
c:\users\yuquanle\anaconda3\envs\python36\lib\site-packages\gensim\utils.py:1197: UserWarning: detected Windows; aliasing chunkize to chunkize_serial
  warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")
  • 载入glove词向量,需要下载预训练模型(我网速太差好久没下载下来)
#glove_embedding = WordEmbeddings('glove')
  • 转换在Glove官网下载的词向量
  • 看这里:https://github.com/zalandoresearch/flair/issues/4
import gensim
vectors = gensim.models.KeyedVectors.load_word2vec_format('wiki-news-300d-1M.vec', binary=False)
vectors.save('fasttext_gensim')
  • 载入转换后的glove词向量
embeddings = WordEmbeddings('fasttext_gensim')
from flair.data import Sentence
sentence = Sentence('the grass is green .')

for token in sentence:
    print(token)
    print(token.embedding)
c:\users\yuquanle\anaconda3\envs\python36\lib\site-packages\gensim\utils.py:1197: UserWarning: detected Windows; aliasing chunkize to chunkize_serial
  warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")


Token: 1 the
tensor([])
Token: 2 grass
tensor([])
Token: 3 is
tensor([])
Token: 4 green
tensor([])
Token: 5 .
tensor([])

Contextual String Embeddings

from flair.embeddings import CharLMEmbeddings
charlm_embedding_forward = CharLMEmbeddings('news-forward-fast')
sentence = Sentence('The grass is green .')
#charlm_embedding_forward.embed(sentence)
for token in sentence:
    print(token)
    print(token.embedding)
Token: 1 The
tensor([ 0.0021, -0.0000, -0.0057,  ..., -0.0000, -0.0001,  0.0163])
Token: 2 grass
tensor([-0.0009, -0.0000,  0.0248,  ..., -0.0000,  0.0006,  0.0057])
Token: 3 is
tensor([ 0.0018, -0.0002,  0.0298,  ..., -0.0000,  0.0000,  0.0003])
Token: 4 green
tensor([-0.0004, -0.0000,  0.0046,  ..., -0.0000, -0.0001,  0.0345])
Token: 5 .
tensor([ 0.0008, -0.0000,  0.0050,  ..., -0.0000, -0.0000,  0.0021])

Character Embeddings

from flair.embeddings import CharacterEmbeddings
embedding = CharacterEmbeddings()
sentence = Sentence('The grass is green .')
for token in sentence:
    print(token)
    print(token.embedding)
Token: 1 The
tensor([])
Token: 2 grass
tensor([])
Token: 3 is
tensor([])
Token: 4 green
tensor([])
Token: 5 .
tensor([])

Stacked Embeddings

from flair.embeddings import WordEmbeddings, CharLMEmbeddings
c:\users\yuquanle\anaconda3\envs\python36\lib\site-packages\gensim\utils.py:1197: UserWarning: detected Windows; aliasing chunkize to chunkize_serial
  warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")
# init GloVe embedding
glove_embedding = WordEmbeddings('fasttext_gensim')

# init CharLM embeddings
charlm_embedding_forward = CharLMEmbeddings('news-forward')
#charlm_embedding_backward = CharLMEmbeddings('news-backward')
from flair.embeddings import StackedEmbeddings
stacked_embeddings = StackedEmbeddings(
    embeddings=[glove_embedding, charlm_embedding_forward])
for token in sentence:
    print(token)
    print(token.embedding)
Token: 1 the
tensor([])
Token: 2 grass
tensor([])
Token: 3 is
tensor([])
Token: 4 green
tensor([])
Token: 5 .
tensor([])

另外,代码我已经上传github:https://github.com/yuquanle/StudyForNLP/blob/master/NLPtools/FlairDemo3.ipynb

欢迎关注【AI小白入门】,这里分享Python、机器学习、深度学习、自然语言处理、人工智能等技术,关注前沿技术,求职经验等,陪有梦想的你一起成长。

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐