Day 17 - [语料库模型] 05-实体对应

在语句中常会出现概念相似的词,包括某类物品、地名、时间...等。例如,轮椅、拐杖、助行器、电动床都属於辅具实体;早上、中午、下午、傍晚属於时间实体。将这些词语对应到所属的类别,可以使程序判断使用者意图时更贴近。

本研究使用 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:  ["请问", "哪里", "可以", "借", "<辅具>"]

如此一来,不管今天使用者想借的是什麽辅具,都可以对应到问题罗!



<<:  DAY17聚类演算法

>>:  DAY 19-数位签章- DSA

身份证明和注册(identity proofing and enrollment)

NIST SP 800-63A提供了这样做的指南。 -身份证明用户之旅(来源:NIST SP 800...

[CSS] Flex/Grid Layout Modules, part 7

我们继续来深入关於 Grid 容器的相关样式设定。虽然目前 CSS 框架在多数情况下并不需要特别在意...

工程师黑暗撞墙期

打从进CMoney培训的第一天起,我应该怀疑过自己无数次:我真的适合当工程师吗? 而当身边的人提出对...

Day37 参加职训(机器学习与资料分析工程师培训班),ResNet, RNN

ResNet架构 from tensorflow.keras import Input, Model...

[Day 29] Banana in a box!在那糖衣的背後

昨天介绍了自制 two-way binding 的方式,今天要接着看在背後 Angular 为我们做...