更多实时更新的个人学习笔记分享,请关注:
知乎:https://www.zhihu.com/people/yuquanle/columns
微信订阅号:AI小白入门
ID: StudyForAI

<center> </center>

Flair工具使用教程


词向量(词嵌入)

  • 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')
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([])

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