文章目录
- 关于 Pareidoscope
- 安装
- 使用方法
- 输入格式
- 语料库
- 查询
- 将语料库转换为 SQLite3 数据库
- 两种语言结构之间的关联
- 简单词素分析
- 关联共现和伴随词素分析
- 相关的更大结构
- 可视化关联结构
关于 Pareidoscope
Pareidoscope 是一组 用于确定任意语言结构之间 关联的工具,例如词语(搭配)、词语和结构(共构)或更大语言结构之间的关联。关于底层共现模型,参见 Proisl (2019)。
安装
Pareidoscope 可在 PyPI 上找到,并可以使用 pip 进行安装:
pip3 install Pareidoscope
或者,您可以下载并解压缩:最新版本 或克隆 Git 仓库:
git clone https://github.com/tsproisl/Pareidoscope.git
在新的目录中,运行以下命令:
python3 setup.py install
使用方法
输入格式
语料库
语料库可以提供两种不同的格式:CoNLL-U 格式或 CWB-treebank 格式。
CoNLL-U 是用于 Universal Dependencies 项目 (Nivre 等人,2016) CWB-treebank 语料库的格式。
格式在UD 文档中指定。以下是一个从文档中改编的示例:
1 他们 他们 PRON PRP _ 2 nsubj 2:nsubj|4:nsubj _
2 买 买 VERB VBP _ 0 root 0:root _
3 和 和 CONJ CC _ 4 cc 4:cc _
4 卖 卖 VERB VBP _ 2 conj 0:root|2:conj _
5 书 书 NOUN NNS _ 2 obj 2:obj|4:obj _
6 . . PUNCT . _ 2 punct 2:punct _
这里有十个制表符分隔的列。前五列是单词 ID、单词形式、词元、通用词性标签和语言特定的词性标签。第六列和第十列,在这个例子中为空,用于形态学特征和杂项注释。在第七列到第九列,编码了这个句子的依存分析。第七列和第八列编码了构成树所需的基本依存关系。第七列指示支配词的 ID,第八列指示支配词和当前词之间的依存关系类型。在第九列,可以表示一个增强的依存图,它不一定要是树形结构。
有关 CWB-treebank 格式的详细信息,请参阅Proisl 和 Uhrig (2012)。
查询
查询图可以以 NetworkX (Hagberg 等人,2008) 所理解的节点-链接格式提供的 JSON 序列化形式。所有命令行工具都可以操作多个查询,因此即使对于单个查询,也必须提供一个查询列表。以下是一个包含一个元素的列表的示例,该列表包含用于查找动词 give 的单调递减使用关联更大结构的查询图(更多示例查询在 doc
目录中提供):
[
{
"graph": {
"description": "动词 give 的单调递减使用"
},
"nodes": [
{
"id": 0,
"wc": "VERB",
"lemma": "give",
"focus_point": true,
"not_outdep": ["iobj", "obl"]
},
{
"id": 1
}
],
"links": [
{
"source": 0,
"target": 1,
"relation": "obj"
}
]
}
]
查询表示为具有两个必选键的字典:nodes
用于顶点,links
用于边。在 graph
键下,可以存储查询的描述等信息。查询图的顶点和边都表示为字典列表。边通过其源和目标顶点的 ID 以及可选的依赖关系类型来指定。顶点必须具有 ID,并且可以具有其他可选属性。
可以用于顶点的属性取决于查询的类型。以下属性始终可以使用:word
、pos
、lemma
、wc
、root
、not_indep
(一个列表)、not_outdep
(一个列表)。前五个属性也可以通过在它们前面加 not_
来否定,例如 "not_wc": "NOUN"
表示顶点不应为名词。
对于使用 pareidoscope_association_strength
确定两个结构之间的关联强度,可以使用以下附加属性。属性 query
必须用于每个顶点,并取值 A
、B
或 AB
。此属性指示顶点是否属于 GA、GB 或两者都属于,即 GC。对于标记为 "query": "AB"
的顶点,可以使用可选的属性 only_A
和 only_B
。这些属性是列表,指示哪些其他属性仅适用于 GA 或 GB。图的关注点顶点可以通过将 "focus_point": true
设置来标记。属性 only_A
和 only_B
也可以用于边。
对于使用 pareidoscope_collexeme_analysis
进行简单的词素分析,必须将 collo_item
属性设置为 true
对于词素顶点。此顶点是自动的关注点。
对于使用 pareidoscope_covarying_collexemes
进行关系共现和共变词素分析,必须将两个词素顶点的 collo_A
和 collo_B
属性设置为 true
。可以使用 focus_point
属性来标记关注点顶点。
对于使用 pareidoscope_associated_structures
查找关联的更大结构,可以通过将 "focus_point": true
设置来标记关注点顶点。
将语料库转换为 SQLite3 数据库
对于以下大多数程序,需要将您的语料库转换为 SQLite3 数据库。这可以显著加快高度选择性的查询;对于需要检查语料库中几乎每句话的非常一般的查询,这的影响较小。
CoNNL-U 或 CWB-treebank 格式的语料库可以使用 pareidoscope_corpus_to_sqlite
转换为 SQLite3 数据库。使用选项 -h
运行程序将输出包含详细使用信息的帮助消息。以下是一个示例,我们将转换训练部分的
英语通用依存句法语料库
(en-ud-train.conllu
; 我们使用包含在 UD treebanks 2.0 版本 中的版本),它是 CoNLL-U 格式,并创建数据库 en-ud-train.db
:
pareidoscope_corpus_to_sqlite --db en-ud-train.db --format conllu en-ud-train.conllu
两种语言结构之间的关联
程序 pareidoscope_association_strength
确定两种语言结构之间的关联强度。
以下是一个关于双重及物动词与有定语的直接宾语共现的示例查询(此查询以及其他查询可以在查询文件 ex_association_two_structures.json
中找到):
[
{
"graph": {
"description": "双重及物动词与有定语的直接宾语的共现"
},
"nodes": [
{
"id": 0,
"wc": "VERB",
"query": "AB",
"focus_point": true
},
{
"id": 1,
"query": "A"
},
{
"id": 2,
"wc": "NOUN",
"query": "AB"
},
{
"id": 3,
"query": "B"
}
],
"links": [
{
"source": 0,
"target": 1,
"relation": "iobj"
},
{
"source": 0,
"target": 2,
"relation": "obj"
},
{
"source": 2,
"target": 3,
"relation": "det"
}
]
}
]
动词 “the” 和直接宾语是两种语言结构的一部分,因此被标记为 AB
。间接宾语仅属于双重及物动词,标记为 A
,而定语仅属于另一种语言结构,标记为 B
。此外,动词被标记为焦点点顶点。
以下是调用程序的示例(使用 -h
选项获取详细使用信息):
pareidoscope_association_strength --format db -o associations en-ud-train.db ex_association_two_structures.json
在此示例中,我们在上面转换的语料库上运行 ex_association_two_structures.json
中指定的查询。选项 --format db
表示我们在 SQLite3 数据库上操作(此程序也可以直接在 CoNLL-U 或 CWB-treebank 格式的语料库文件上操作)。结果以制表符分隔的格式写入 associations.tsv
,包含每个查询和每个计数方法的频率 O11, R1, C1 和 N,不一致的数量以及三个关联度量(似然比、t-分数、Dice 系数)。
简单词素分析
程序 pareidoscope_collexeme_analysis
执行简单的词素分析,即它确定语言结构与给定结构槽中出现的词形或词根之间的关联强度。为此,必须在查询中用 "collo_item": true
标记 collo 项顶点。以下是一个示例查询(取自查询文件 ex_collexeme_analysis.json
),用于找到与双宾语相关的动词:
[
{
"graph": {
"description": "与双宾语相关的动词"
},
"nodes": [
{
"id": 0,
"wc": "VERB",
"collo_item": true
},
{
"id": 1
},
{
"id": 2
}
],
"links": [
{
"source": 0,
"target": 1,
"relation": "iobj"
},
{
"source": 0,
"target": 2,
"relation": "obj"
}
]
}
]
以下是调用程序的示例(使用 -h
选项获取详细使用信息):
pareidoscope_collexeme_analysis -o collexemes en-ud-train.db ex_collexeme_analysis.json
在这个示例中,我们在上述转换的语料库上运行 ex_collexeme_analysis.json
中指定的查询。程序接受可选的 -c
选项,我们可以指定 collo 项是词形还是词根(默认为后者)。
结果以制表符分隔的格式写入 collexemes.tsv
,并包含每个查询和共现词根的频率 O11, R1, C1 和 N 以及三个关联度量(对数似然、t-分数、Dice 系数)。
对于简单词素分析,四种计数方法中有三种是完全等价的。由于在这种情况下由于可能存在的大量不一致性,计算句子数量没有多少意义,所以我们不包括该计数方法。因此,我们不需要区分不同的计数方法,也不需要包括不一致性的字段。结果按对数似然排序。
关联共现和伴随词素分析
程序 pareidoscope_covarying_collexemes
执行伴随词素分析,对于由单个依存关系组成的语言结构,相当于分析关联共现。该程序确定在语言结构的两个槽位中共同出现的词形或词干之间的关联。为此,必须将这两个槽位标记为 "collo_A": true
和 "collo_B": true
在查询中。以下是一个示例查询(从查询文件 ex_covarying_collexemes.json
中提取),该查询确定 into-因果关系中的动词之间的关联:
[
{
"graph": {
"description": "Into-causative, i.e. verb someone into verbing"
},
"nodes": [
{
"id": 0,
"wc": "VERB",
"collo_A": true
},
{
"id": 1,
"pos": "VBG",
"collo_B": true
},
{
"id": 2
},
{
"id": 3,
"lemma": "into"
}
],
"links": [
{
"source": 0,
"target": 1,
"relation": "advcl"
},
{
"source": 0,
"target": 2,
"relation": "obj"
},
{
"source": 1,
"target": 3,
"relation": "mark"
}
]
}
]
以下是一个调用程序的示例(使用 -h
选项获取详细使用信息):
pareidoscope_covarying_collexemes -o covarying en-ud-train.db ex_covarying_collexemes.json
在这个例子中,我们在上述转换的语料库上运行 ex_covarying_collexemes.json
中指定的查询。程序接受一个可选选项 -c
,其中我们可以指定共同出现的项目应该是词形还是词干(后者是默认值)。
结果写入 covarying.tsv
,采用制表符分隔的格式,并包含每个查询的共现项目对和计数方法、频率 O11, R1, C1 和 N、不一致的数量以及三个关联度量(对数似然、t-得分、Dice 系数)。结果按对数似然排序,以确定计数焦点。
相关的更大结构
程序 pareidoscope_associated_structures
确定与查询结构相关联的更大去词化语言结构。它考虑所有星形更大的结构,即所有新顶点都必须与查询顶点相邻的结构,这些结构与查询结构在至少 --min-coocc
句子(默认:5)中共同出现,并且顶点数最多为 --max-size
(默认:7)。更大结构的顶点被去词化,并且只包含词类信息(wc
属性)。以下是一个查询示例,该查询寻找与动词 give 的单及物用法相关联的更大结构:
[
{
"graph": {
"description": "动词 give 的单及物用法"
},
"nodes": [
{
"id": 0,
"wc": "VERB",
"lemma": "give",
"focus_point": true,
"not_outdep": ["iobj", "obl"]
},
{
"id": 1
}
],
"links": [
{
"source": 0,
"target": 1,
"relation": "obj"
}
]
}
]
以下是调用程序的一个示例(使用选项 -h
获取详细使用信息):
pareidoscope_associated_structures -o assoc_struc en-ud-train.db ex_associated_structures.json
在此示例中,我们在上述转换后的语料库上运行 ex_associated_structures.json
中指定的查询。
结果以制表符分隔的格式写入 assoc_struc.tsv
,并包含每个查询的相关更大结构和计数方法、频率 O11, R1, C1 和 N,不一致的数量以及三个关联度量(对数似然比、t-得分、Dice 系数)。结果按对数似然比对计数焦点点进行排序。
可视化关联结构
pareidoscope_associated_structures
输出的关联较大结构以节点-链接格式呈现,与查询图相同,可以使用程序 pareidoscope_draw_graphs
进行可视化。请注意,这要求您的计算机上已安装 Graphviz 和 Python 包 pydot。
以下是如何调用程序的一个示例(使用选项 -h
获取详细的用法信息):
tail -n +2 assoc_struc.tsv | head | cut -f2 | pareidoscope_draw_graphs -o draw -
在这个示例中,我们使用上一个命令创建的输出文件,提取十个最强烈关联的较大结构(使用 GNU coreutils)并绘制它们。图像将写入 draw
目录。以下是为与单向传递性 give 最强烈关联的四个较大结构创建的可视化。