tricktreat / locate-and-label

Code for "Locate and Label: A Two-stage Identifier for Nested Named Entity Recognition", accepted at ACL 2021.
102 stars 18 forks source link

Have you ever tried this method on Chinese datasets? #3

Closed HuimengZhang closed 3 years ago

HuimengZhang commented 3 years ago

请问是否在中文数据集上尝试过此方法?此方法需要词性标注信息和词汇信息,请问在中文上效果如何?

tricktreat commented 3 years ago

你好,在附录部分,我们有比较Weibo NER中文数据集,效果超过FLAT 0.61%。

lzf00 commented 2 years ago

请问中文数据集的pos词表是用什么做的; 如何不是很明白数据集中的文件是怎么得来的? genia_test.json和genia_test_context.json的区别是什么 image

tricktreat commented 2 years ago

你好,pos是使用spacy工具标注的。

genia_test_context相比于genia_test多了ltoken和rtoken,表示句子的上下文。

vocab相关文件是模型训练过程中产生的缓存,vocab的生成过程请查看https://github.com/tricktreat/locate-and-label/blob/0e05376fb0174e7eacf66d3c6443a8f1dcab8d5d/identifier/input_reader.py#L194

模型训练只需要该文件夹下的genia_pos.json、genia_test_context.json、genia_train_dev_context.json、genia_types.json。

lzf00 commented 2 years ago

好的,感谢回复,我先试试跑通demo

lzf00 commented 2 years ago

你好,pos是使用spacy标注工具的。

genia_test_text 相比于genia_testconn更多的是token和rtoken,表示句子的时间。

vocab相关文件是模型训练过程中产生过程的缓存,请查看vocab的生成过程

https://github.com/tricktreat/locate-and-label/blob/0e05376fb0174e7eacf66d3c6443a8f1dcab8d5d/identifier/input_reader.py#L194

模型训练只需要该文件夹下的genia_pos.json、genia_test_context.json、genia_train_dev_context.json、genia_types.json。

我已经跑到了demo,但是不清楚genia_pos.json文件是怎么得来的,中文数据集该如何得到这个文件?

tricktreat commented 2 years ago

你好,genia_pos.json就是对数据集处理得到的pos进行频率统计,然后编号。中文数据集处理方式相同。

lzf00 commented 2 years ago

好的,明白

lzf00 commented 2 years ago

你好,genia_pos.json就是对数据集处理得到的pos进行频率统计,然后编号。中文数据集处理方式相同。

那这个文件的字典的key为词性,value为该词性的数量,是这样吗

tricktreat commented 2 years ago

是的

lzf00 commented 2 years ago

是的

image qing请问这个test/0001,代表batch size吗,我看一批数据为6个,然后就是都只有ltoken,没有rtoken,是为什么

tricktreat commented 2 years ago

test/0001表示文档的id,具有同样org_id的表示同一文档。项目里提供的genia数据集只设置了ltokens,表示只用前文,没用后文。你也可以自己设置,就是把当前实例的rtoken设置为下一个具有相同org_id实例的tokens。

lzf00 commented 2 years ago

好的,对应中文pos和英文pos有一个疑问,因为英文以空格分词,所以英文的tokens和pos词性可以一一对应上,但是中文分词没有空格,tokens是按字符分的,然后pos是分词工具分的,所以tokens和pos不能一一对应,这种情况该如何处理?或者不一样对用模型还能跑通吗?

tricktreat commented 2 years ago

你好,跑不通。你可以稍微修改代码,去除数据预处理对pos字段的依赖(同时设置use_pos = False),主要是修改: https://github.com/tricktreat/locate-and-label/blob/0e05376fb0174e7eacf66d3c6443a8f1dcab8d5d/identifier/input_reader.py#L232

另外有个简单的方法,数据集文件中pos随便设置为和tokens等长的序列。然后模型配置文件中设置use_pos = False: https://github.com/tricktreat/locate-and-label/blob/0e05376fb0174e7eacf66d3c6443a8f1dcab8d5d/configs/example.conf#L60