NLP学习(6) 信息抽取

信息抽取

🎥188

非结构化数据; 抽取实体; 抽取关系;

评估方法: F1-Score

NER

方法分类
  • 利用规则, 比如美国电话(?:\(?[0-9]{3}\)?[0-9]{3}[ -.]?[0-9]{4})
  • 投票模型, 统计每个单词的类型, 取频率最高的. 一般用作baseline
  • 利用分类模型
1. 简单特征工程
def get_feature(word: str):
    return np.array([word.istitle(), word.islower(), word.isupper(),
                     len(word), word.isdigit(), word.isalpha()])

words = [get_feature(w) for w in data["Word"].values.tolist()]
tags = data["Tag"].values.tolist()

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import classification_report
pred = cross_val_predict(RandomForestClassifier(n_estimators=20), X=words, y=tags, cv=5)
report = classification_report(y_pred=pred, y_true=tags)
print(report)

使用基本的特征, 利用机器学习模型进行分类.

2. 文本领域的特征工程方法

以英文举例. The professor Colin proposed a model for NER in 1999

方法分类

  1. Bag-of-word features

    当前词(Colin), 前后词(professor, proposed), 前前(the), Bi-gram

  2. 词性

    当前词(名词), 前后词(名词, 动词), 前前(冠词)

  3. 前缀 & 后缀

    当前词(Co, in), 前后词(pr, or; pr, ed)

  4. 当前词的特性

    单词长度(5), 含有多少个大写字母, 是否大写开头, 是否包含-, 是否包含数字,

    是否包含to, my等

  5. steming+重复

3. 特征编码

位置loc → \to one-hot encoding, 会变成Tag Set的长度, 太长了

常见的特征种类

  • Categorical Feature: 男,女 → \to (0,1),(1,0)
    • 如果类别分类太多,比如城市,可以往上再合并一层,比如省
  • Contiguous Feature: 身高
    • 直接用, 或者映射到(0,1)
    • 离散化, <150$\to 1 , 150 − 160 1, 150-160 1,150160\to 2 , 160 − 170 2, 160-170 2,160170\to$3
  • Ordinal Feature: 成绩(优秀,良好,中等,及格,不及格), 只有顺序, 不能对值的差距进行量化

关系抽取

🎥198

文本: 张三毕业于北京大学, 目前在北京工作

用三元组表示关系: (张三,工作在,北京), (张三,毕业于,北京大学), 图称为RDF

在工业界的知识图谱里面还会存一些属性, (property graph)

重要性
  • 在问答系统中, 整理知识
  • 扩充原有知识库
  • 构建法律, 金融领域的知识库
Ontological Relation
  • IS-A (Hypernym Relation)
  • Instance-of

依靠这个可以搭建出层次关系

开源知识库代码(都是英文的)

  • FreeBase
  • WorldNet
  • Yago
  • Dpedia
  • KnowledgeVault

方法

1. 基于规则(主流方法)

构建规则集

X (is a) Y
Y (such as) X
Y including X
Y, especially X

假如在文章里发现了

... apple (is a) fruit ...
... fruit (such as) banana

然后把(apple, fruit), (banana, fruit)放入知识库中

最终知识库中可能插入了错误的信息, 因为没有对规则定义一些约束.

对规则集增加实体限制

X is a Y ==> X[Fruit] is a Y

好处是: 提升挖掘结果的准确性, 只返回想要的结果

优点: (1)准确 (2)不需要训练数据

缺点: (1)低召回率(很难想出所有的规则) (2)浪费人力成本 (3)规则很难设计

2. 监督学习

步骤

①定义关系类型 ②定义实体类型 ③训练数据储备(标注好实体和关系)

特征工程

文本 American Airline(ORG), a unit of AMR, immediately match the move, spokesman Tim Wanger(PER) said

有一个分类算法,能够输出一对实体(比如 American Airline, Tim Wanger)属于不同关系的概率

这个算法需要的特征可以有:

①Bag-of-word feature, 除了一对实体本身之外, 还可以有单词的前后单词

②POS feature(词性特征), 实体本身的词性, 前后单词的词性

③实体类别: (ORG, PER, 等)

④Steming(针对英文)

⑤位置相关特征: (两个实体间出现了多少单词, 这句话在本文中的位置)

⑥句法分析相关特征: 两个节点在语(句)法树中的最短路径; 经过了几个节点

依存文法相关特征: 最短路径; 是否直接相邻

分类算法

模型1: 输出是否有关系, 二分类问题, 大部分实体对都会被否决掉

模型2: 输出每个分类的概率,

3. 半监督 & 无监督学习

🎥205

Bootstrap算法

假设已知一些关系(称为seed tuple), 比如

作者,书
李航,统计机器学习
周,机器学习

第一步: 生成规则

假设在文本中发现了

李航写了统计机器学习
机器学习是由周写的

提取出规则

<作者>写了<书>
<书>是由<作者>写的

第二步: 生成关系tuple的过程

从数据集中扫描规则, 得到新的关系tuple

作者,书
张三,xxx
李四,yyy

将新的关系与上面的规则合并, 继续循环.

缺点

[1] 循环会导致错误累积, 到后面的准确率越来越低

[2] 规则要求精准匹配, 对句子轻微改动就会导致匹配不上

SnowBall(属于Bootstrap)

人为给定一些seed tuple, 比如

ORG,LOC
Microsoft,Redmond
IBM,Arkmonk
Boing,Seattle
Intel,Santa Clara

假设有以下文本

Computer serves at (Microsoft)'s headquaters in (Redmond).
In mid-afternoon, (Redmond)-based (Microsoft) fell.
The (Arkmonk)-based (IBM) introduted a new product.
(Boing)'s headquaters in (seattle)...
(Intel), (Santa Clara), cut price of...

把每个规则表示成五元组, 例如

(serves at) (Microsoft)('s headquaters in) (Redmond)( )
// 起个名字: <Left ORG Middle LOC Right>
// 设Left和Right的长度都是2

把Left Middle Right转成向量化的文字

计算相似度的方法

设有 规则1 P = < L 1 , T 1 , M 1 , T 2 , R 1 > P=<L_1,T_1,M_1,T_2,R_1> P=<L1,T1,M1,T2,R1> 规则2 S = < L 2 , T 1 ′ , M 2 , T 2 ′ , R 2 > S=<L_2,T_1',M_2,T_2',R_2> S=<L2,T1,M2,T2,R2>, T T T是实体类型

s i m ( P , S ) = { 0 , if T 1 ≠ T 1 ′ or T 2 ≠ T 2 ′ μ 1 L 1 ⋅ L 2 + μ 2 M 1 ⋅ M 2 + μ 3 R 1 ⋅ R 2 , otherwise sim(P,S)=\left\{\begin{aligned} &0, \quad && \text{if}\quad T_1 \neq T_1' \quad \text{or} \quad T_2 \neq T_2'\\ &\mu_1 L_1\cdot L_2+\mu_2 M_1\cdot M_2+\mu_3 R_1\cdot R_2, \quad &&\text{otherwise}\\ \end{aligned}\right.\\ sim(P,S)={0,μ1L1L2+μ2M1M2+μ3R1R2,ifT1=T1orT2=T2otherwise
第一步: 生成模板

假设从文本中发现了4个模板,
( serves 0.71 at 0.71 ) ORG ( ’s 0.57 headquators 0.57 in 0.57 ) LOC ( ) (1) \left( \begin{matrix}\text{serves} & 0.71\\\text{at}&0.71\end{matrix}\right) \text{ORG} \left(\begin{matrix} \text{'s}&0.57\\\text{headquators}& 0.57\\\text{in}&0.57\end{matrix}\right) \text{LOC} \begin{pmatrix} \quad \end{pmatrix} \tag{1}\\ (servesat0.710.71)ORG’sheadquatorsin0.570.570.57LOC()(1)

( In 0.71 mid-afternoon 0.71 ) LOC ( − 0.71 based 0.71 ) ORG ( fell 1 ) (2) \begin{pmatrix} \text{In}&0.71\\\text{mid-afternoon}&0.71\end{pmatrix} \text{LOC} \begin{pmatrix} -&0.71\\\text{based}&0.71 \end{pmatrix} \text{ORG} \begin{pmatrix} \text{fell} & 1 \end{pmatrix} \tag{2}\\ (Inmid-afternoon0.710.71)LOC(based0.710.71)ORG(fell1)(2)

( The 1 ) LOC ( − 0.71 based 0.71 ) ORG ( introduced 0.71 a 0.71 ) (3) \begin{pmatrix} \text{The}&1 \end{pmatrix} \text{LOC} \begin{pmatrix} -&0.71\\\text{based}&0.71 \end{pmatrix} \text{ORG} \begin{pmatrix} \text{introduced}&0.71\\ \text{a}&0.71\end{pmatrix} \tag{3} (The1)LOC(based0.710.71)ORG(introduceda0.710.71)(3)

( operate 0.71 from 0.71 ) ORG ( is 0.71 headquators 0.57 is 0.57 ) LOC ( ) (4) \begin{pmatrix} \text{operate}&0.71\\\text{from}&0.71 \end{pmatrix} \text{ORG} \begin{pmatrix} \text{is}&0.71 \\ \text{headquators}&0.57 \\ \text{is}&0.57 \end{pmatrix} \text{LOC} \begin{pmatrix} \quad \end{pmatrix} \tag{4} (operatefrom0.710.71)ORGisheadquatorsis0.710.570.57LOC()(4)

( serves at ) → [ 0 , ⋯   , 0 , 1 , 0 , ⋯   , 0 , 1 , 0 , ⋯ ] ⟶ 使模长变成1 [ 0 , ⋯   , 0 , 0.71 , 0 , ⋯   , 0 , 0.71 , 0 , ⋯ ] 2 × 0.7 1 2 ≈ 1 \begin{aligned} \begin{pmatrix} \text{serves}&\text{at} \end{pmatrix} &\to \begin{bmatrix} 0,\cdots,0,1,0,\cdots,0,1,0,\cdots\end{bmatrix}\\ &\stackrel{\text{使模长变成1}}{\longrightarrow} \begin{bmatrix} 0,\cdots,0,0.71,0,\cdots,0,0.71,0,\cdots\end{bmatrix}\\ 2\times 0.71^2 &\approx 1 \end{aligned} (servesat)2×0.712[0,,0,1,0,,0,1,0,]使模长变成1[0,,0,0.71,0,,0,0.71,0,]1

在根据计算相似度的方法对模板进行聚类. 最最基本的聚类方法是, 假设有一个库 ( P 1 , P 2 , ⋯ P n ) (P_1,P_2,\cdots P_n) (P1,P2,Pn)

  1. [ P 1 P_1 P1]
  2. [ P 1 P_1 P1, P 2 P_2 P2] when s i m ( P 1 , P 2 ) > 0.75 sim(P_1,P_2)>0.75 sim(P1,P2)>0.75 (设0.75是归为同类的阈值)
  3. [ P 1 P_1 P1, P 2 P_2 P2], [ P 3 P_3 P3] when s i m ( P 1 , P 3 ) < 0.75 sim(P_1,P_3)<0.75 sim(P1,P3)<0.75 and P ( P 2 , P 3 ) < 0.75 P(P_2,P_3)<0.75 P(P2,P3)<0.75

设S是所有类, 目标是找到一个s, 使得max([[sim( P n e w P_{new} Pnew, P P P) for P P P in s] for s in S])最大

然后对每类模板进行平均, 得到规则库

第二步: 生成tuple

(SnowBall方法是要先进行NER的)

找到一对实体的<Left,Middle,Right>, 然后计算跟规则库里面的每个规则的相似度, 如果超过阈值就放到"已知关系"中 (找到的实体是要符合规则定义的, 规则里面是定义了两个实体类型的)

第三步: 模式验证

将seed tuple作为ground truth (正确的), 验证每个规则找出来的tuple的正确率, 过滤掉准确率低的规则.

(准确率要保存起来, 下一步用)

第四步: tuple验证

一个tuple是通过多个规则加进来的

Pattern 1, 0.8
Pattern 2, 0.75
Pattern 3, 0.81
Pattern 4, 0.78
Pattern 5, 0.83
<Microsoft, Seattle>
<Amazon, Seattle>
<百度, 北京>
<Facebook, 北京>

有多个更靠谱的规则生成的关系tuple更靠谱. tuple的置信度计算公式:

confidence ( t i ) = 1 − ∏ i = 1 k ( 1 − confidence ( P i ) ) \begin{aligned} \text{confidence}(t_i)=1-\prod_{i=1}^k (1-\text{confidence}(P_i)) \end{aligned} confidence(ti)=1i=1k(1confidence(Pi))

例如 confidence ( <Amazon, Seattle> ) = 1 − 0.75 = 0.25 \text{confidence}(\text{<Amazon, Seattle>})=1-0.75=0.25 confidence(<Amazon, Seattle>)=10.75=0.25, confidence ( <百度,北京> ) = 1 − ( 1 − 0.75 ) × ( 1 − 0.81 ) = 0.9525 \text{confidence}(\text{<百度,北京>})=1-(1-0.75)\times(1-0.81)=0.9525 confidence(<百度,北京>)=1(10.75)×(10.81)=0.9525

Distant Supervison

无监督学习

实体问题

实体消岐

Entity Disambiguation 🎥212

基于上下文的消岐方法
苹果,ID,一种水果
苹果,ID,一个美国科技公司

句子

今天苹果发布了新的手机

通过tf-idf分别计算苹果在句子和实体库中的向量, 然后计算句子中的苹果和实体库中的相似度.

Almo Bert 都是这类算法

实体统一

一个实体有不同的名字

问题定义: 给定两个实体(str1,str2), 判断是否指向同一实体.

基于编辑距离的方法:

就跟拼写检查的方法类似

基于规则的方法

通过设计规则, 让字符串变成原型

百度有限公司, 百度科技有限公司 → \to 原型(prototype)

在这个库里面的都可以删除?
有限公司  |  北京市  |  科技
无限公司  |  天津市  |
百度有限公司    -> 百度
百度科技有限公司 -> 百度
百度广州分公司   -> 百度
基于监督学习的方法
...百度...  =tf-idf=> v_1
...百度有限公司... =tf-idf=> v_2

文档中的两个实体经过tf-idf生成向量, 然后可以用多种方法

①concat[ v 1 v_1 v1, v 2 v_2 v2] → \to 模型,进行二分类(是否是同一个实体)

②余弦相似度 → \to 得到两个词语的相似度

基于图的实体统一

讲者画了一个图(网络), 节点是实体, 边是关系

实体A的特征 V A V_A VA表示为 ( age,salary,job,.... ⏟ 个体特征 , 3 , s 1 ( 实 体 1 ) , s 2 , s 3 ⏟ 关系相关特征 ) (\underbrace{\text{age,salary,job,....}}_\text{个体特征},\underbrace{3,s_1(实体1),s_2,s_3}_\text{关系相关特征}) (个体特征 age,salary,job,....,关系相关特征 3,s1(1),s2,s3)

然后用特征计算实体的相似度

指代消解

[张三]没有去上班, 因为生病了. 昨天[李四]陪[他](命名为A)去了医院, [他](命名为B)已经好了.
---
他是谁?
二分类问题

最简单的方法是看成二分类问题, 他指代的是不是张三?

(张三, A) -> 1
(李四, A) -> 0
(张三, B) -> 1
(李四, B) -> 0

每一对词都输入到二分类模型里面. 需要用之前学习的特征工程构建特征.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值