专栏首页AI小白入门flair的使用方法

flair的使用方法

本文介绍了flair的使用方法,Flair是最近开源的一个基于Pytorch的NLP框架,它是一个功能强大的NLP库。Flair允许您将最先进的自然语言处理(NLP)模型应用于文本,例如命名实体识别(NER),词性标注(PoS),意义消歧和分类。

简介

Flair是最近开源的一个基于Pytorch的NLP框架,据官方github介绍,它具有以下特点:

一个功能强大的NLP库。Flair允许您将最先进的自然语言处理(NLP)模型应用于您的文本,例如命名实体识别(NER),词性标注(PoS),意义消歧和分类。

文本嵌入库。Flair具有简单的界面,允许您使用和组合不同的单词和文档嵌入,包括作者提出的上下文字符串嵌入(文章:COLING2018-Contextual String Embeddings for Sequence Labeling)。

Pytorch NLP框架。框架直接在Pytorch上构建,使得可以轻松地训练自己的模型,并使用Flair嵌入和类来尝试新方法。

GitHub地址:https://github.com/zalandoresearch/flair

实战

1.安装

# 安装环境:官网说目前对linux支持较好,以下为我在winodw上测试环境
# windows 10
# PyTorch 0.4+
# Python 3.6+
# pip install flair

这个库包含两种类型:SentenceToken, Sentence类型包含我们想要处理的一个句,是Token类型的集合:

from flair.data import Sentence
sentence = Sentence('The grass is green .')
# 输出显示这个句子由5个Token组成
print(sentence)

Sentence: "The grass is green ." - 5 Tokens

可以通过Token ID或其索引访问句子的Token:

# 使用 token id
print(sentence.get_token(4))
# 使用索引
print(sentence[3])

Token: 4 green
Token: 4 green

# 迭代输出token
for token in sentence:
 print(token)

Token: 1 The
Token: 2 grass
Token: 3 is
Token: 4 green
Token: 5 .

Tokenization:一些情况下,文本未Tokenization

from flair.data import Sentence
# 设置use_tokenizer参数
sentence = Sentence('The grass is green.', use_tokenizer=True)
print(sentence)

Sentence: "The grass is green ." - 5 Tokens

Adding Tags to Tokens(为token打标签)

# token具有用于语言注释的字段,如lemmas、词性标记或命名实体标记。可以通过指定标签类型和标签值来添加标签。
# 给句子中某个词加标签
sentence[3].add_tag('ner', 'color')
# 可以看到,输出green后面带有命名实体标签'color'
print(sentence.to_tagged_string())

The grass is green <color> .

Adding Labels to Sentences(给句子打标签)

# 句子可以具有一个或多个标签,例如,这些标签可用于文本分类任务。
sentence = Sentence('France is the current world cup winner.')
# 给句子增加一个sports标签
sentence.add_label('sports')
print(sentence.labels)

[sports (1.0)]

# 给句子增加多个标签
sentence = Sentence('France is the current world cup winner.')
sentence.add_labels(['sports', 'world cup'])
print(sentence.labels)

[sports (1.0), world cup (1.0)]

2.使用词向量教程

# Flair提供了很多Class,可以通过很多方法获得词/句子嵌入。词嵌入类都继承自TokenEmbeddings类,并实现embed()方法,您需要调用该方法来嵌入文本。
# 生成的所有嵌入都是Pytorch向量,因此它们可以立即用于训练和微调。
# 经典的词嵌入是静态的和单词级的,这意味着每个不同的单词只能获得一个预先计算的嵌入。大多数词嵌入都属于这一类,包括流行的GloVe或Komnios嵌入。
# 上下文字符嵌入是一类强大的词嵌入,能够更好的捕获潜在的语法语义信息。
# Stacked Embeddings(堆叠嵌入)是此库中最重要的概念之一。您可以使用它们将不同的嵌入组合在一起。

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")

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)

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)

flair工具是非常强大的,如果想更多的了解用法,github上有更多的教程,包括:

代码已上传:1.https://github.com/yuquanle/StudyForNLP/blob/master/NLPtools/FlairDemo1.ipynb

2.https://github.com/yuquanle/StudyForNLP/blob/master/NLPtools/FlairDemo3.ipynb

The End

本文分享自微信公众号 - AI小白入门(StudyForAI),作者:yuquanle

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【收藏】2万字超长干货,如何做研究?

    https://dspace.mit.edu/bitstream/handle/1721.1/41487/AI_WP_316.pdf

    yuquanle
  • 一天快速入门python

    Python 是由Guido Van Rossum在 90 年代早期设计,现在是最常用的编程语言之一。特别是人工智能的火热,再加之它的语法简洁且优美,实乃初学者...

    yuquanle
  • 【Pre-Training】XLNet:预训练最强,舍我其谁

    今天学习的是谷歌大脑的同学和 CMU 的同学的论文《XLNet: Generalized Autoregressive Pretraining for Lang...

    yuquanle
  • app 安全和ios及安卓马甲包代码混淆的demo的手把手教你的详细教程

    App Security And CodeConfuse (app 安全和代码混淆的demo的手把手教你的详细教程)

    jiang chen
  • 基于shinydashboard搭建你的仪表板(四)

    主体的布局使用Bootstrapgrid layout system(Bootstrap网格系统),可以将主体划分为12个列宽相等的区域以及任意可变高度的行。...

    1480
  • jvm系列(四):jvm调优-命令篇

    运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM...

    纯洁的微笑
  • Java虚拟机(五):JVM调优命令

    运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM...

    朝雨忆轻尘
  • 走进科学: 无线安全需要了解的芯片选型、扫描器使用知识

    作者 LittleHann 目录 1. 无线安全研究需要的软硬件选型、及物理电气参数 2. 无线攻击第一步: "网络AP探测"、扫描器的使用 1. 无线安全研究...

    FB客服
  • 韩国最大加密货币交易所Upbit遭检方突击检查

    韩国最大的加密货币交易所Upbit日前遭到了韩国检方的突击检查。Upbit上周五在其网站发布的公告证实了上述调查消息。Upbit表示,正“全力配合”有关部门的调...

    周俊辉
  • 如何安装Git并克隆GitHub存储库

    GitHub是一个允许开发人员使用Git版本控制系统进行协作的网站。通过Git和GitHub,来自世界各地的程序员可以在有组织的最新流程中分享想法和代码。

    Techeek

扫码关注云+社区

领取腾讯云代金券