工具篇Flair之使用词向量教程
更多实时更新的个人学习笔记分享,请关注:
知乎:https://www.zhihu.com/people/yuquanle/columns
微信订阅号:AI小白入门
ID: StudyForAI
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
上下文字符嵌入是一类强大的词嵌入,能够更好的捕获潜在的语法语义信息。 主要区别在于:
- 它们在没有任何明确的单词概念的情况下进行训练,从而从根本上将单词建模为字符序列。
- 它们通过其周围文本进行语境化,这意味着相同的单词将根据其上下文使用而具有不同的嵌入。
您可以通过将字符串传递给CharLMEmbeddings类的构造函数来选择加载的嵌入。 目前,提供了以下Contextual String Embeddings:
-
Character Embeddings
一些嵌入 - 例如字符特征 - 不是预先训练的,而是在下游任务上训练。 通常,这需要您实现分层嵌入体系结构。有了Flair,你不必担心这些事情。 只需选择适当的嵌入类,然后在下游任务培训期间自动训练字符特征。 -
Stacked Embeddings
Stacked Embeddings(堆叠嵌入)是此库中最重要的概念之一。 您可以使用它们将不同的嵌入组合在一起,例如:
- 如果您想要将传统嵌入与上下文嵌入嵌入一起使用。
- 堆叠嵌入允许您混合和匹配。 我们发现嵌入的组合通常会产生最佳效果。
- 您需要做的就是使用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