在语句中常会出现概念相似的词,包括某类物品、地名、时间...等。例如,轮椅、拐杖、助行器、电动床都属於辅具实体;早上、中午、下午、傍晚属於时间实体。将这些词语对应到所属的类别,可以使程序判断使用者意图时更贴近。
本研究使用 JSON 档案纪录词语及其实体,并在程序完成断词後,将词语一一对应到实体。需要增加实体时,可以直接修改档案。
实体对应设定档: https://gitlab.com/graduate_lab415/nlp/-/blob/master/docs/entities_config.json
完整程序在这边: https://gitlab.com/graduate_lab415/nlp/-/blob/master/main.py
首先我在最上方的设计了一个变数,控制是否要为问句加上标签。
"""
LABEL = True | False
default: True
"""
LABEL = True
接着程序会判断本次制作模型,是否需要加标签。若是,执行下方程序码;若否跳过此段不执行。
"""use labeled or unlabeled"""
if LABEL:
label_conf = json.load(open("/home/yr/PycharmProjects/nlp/docs/entities_config.json", "r"))
docs_words_labeled = list()
for doc_words in docs_words:
doc_labeled = add_label(doc_words, label_conf)
docs_words = docs_words_labeled
open("档案位址", "读取模式")
是开启前面我们设计好的设定档。因为刚读入的设定档是纯文字,因此接着使用 json.load()
将它转成 json 格式。接下来使用回圈为每一句问句加上标签,并存入 docs_words_labeled
的 list 之中。
主要负责为句子加上标签。
def add_label(doc,
label_config=json.load(open("/home/yr/PycharmProjects/nlp/docs/entities_config.json", "r"))):
"""labeling"""
doc_tmp = list()
for word in doc:
word_tmp = word
for entity_name in label_config:
if word in label_config[entity_name]:
word_tmp = entity_name
doc_tmp.append(word_tmp)
docs_words_labeled.append(doc_tmp)
if LOG:
print("before labeling:\t{}".format(doc))
print("after labeling:\t\t{}".format(doc_tmp))
return doc_tmp
先讲参数部分
doc
: 要加标签的句子label_config
: 标签的设定档。这边是 Python 的一个特别的写法,当没有传入参数时,直接使用预设值。昨天我们先断过词了,所以接下是把每词拿出来和设定档比对若有符合,就把词的部分改成标签。像是这样:
Before: ["请问", "哪里", "可以", "借", "轮椅"]
After: ["请问", "哪里", "可以", "借", "<辅具>"]
如此一来,不管今天使用者想借的是什麽辅具,都可以对应到问题罗!
NIST SP 800-63A提供了这样做的指南。 -身份证明用户之旅(来源:NIST SP 800...
我们继续来深入关於 Grid 容器的相关样式设定。虽然目前 CSS 框架在多数情况下并不需要特别在意...
打从进CMoney培训的第一天起,我应该怀疑过自己无数次:我真的适合当工程师吗? 而当身边的人提出对...
ResNet架构 from tensorflow.keras import Input, Model...
昨天介绍了自制 two-way binding 的方式,今天要接着看在背後 Angular 为我们做...