學習筆記CB004:提問、檢索、回答、NLPIR

聊天機器人,提問、檢索、回答。git

提問,查詢關鍵詞生成、答案類型肯定、句法和語義分析。查詢關鍵詞生成,提問提取關鍵詞,中心詞關聯擴展詞。答案類型肯定,肯定提問類型。句法和語義分析,問題深層含義剖析。檢索,搜索,根據查詢關鍵詞信息檢索,返回句子或段落。答案抽取,分析和推理檢索句子或段落,抽取提問一致實體,根據機率最大對候選答案排序。github

海量文本知識表示,網絡文本資源獲取、機器學習方法、大規模語義計算和推理、知識表示體系、知識庫構建。問句解析,中文分詞、詞性標註、實體標註、概念類別標註、句法分析、語義分析、邏輯結構標註、指代消解、關聯關係標註、問句分類、答案類別肯定。答案生成過濾,候選答案抽取、關係推演、吻哈程度判斷、噪聲過濾。微信

聊天機器人技術類型。基於檢索技術,信息檢索,簡單易實現,沒法從句法關係和語義關係給出答案,沒法推理問題。基於模式匹配技術,把問題往梳理好的模式匹配,推理簡單,模式涵蓋不全。基於天然語言理解技術,把淺層分析加句法分析、語義分析。基於統計翻譯模型技術,把問句疑問詞留出來,和候選答案資源匹配。網絡

問句解析。哈工大LTP(語言技術平臺)、博森科技、jieba分詞、中科院張華平博士NLPIR漢語分詞系統。機器學習

NLPIR,http://pynlpir.readthedocs.io/en/latest/。安裝 pip install pynlpir 。下載受權文件 https://github.com/NLPIR-team/NLPIR/blob/master/License/license%20for%20a%20month/NLPIR-ICTCLAS分詞系統受權/NLPIR.user,替換pynlpir/Data目錄的已過時文件。學習

# coding:utf-8

import sys
import importlib
importlib.reload(sys)

import pynlpir

pynlpir.open()
# s = '聊天機器人到底該怎麼作呢?'
s = '海洋是如何造成的'

# 分詞 分析功能全打開 不使用英文
segments = pynlpir.segment(s, pos_names='all', pos_english=False)
for segment in segments:
    print(segment[0], 't', segment[1])

# 關鍵詞提取
key_words = pynlpir.get_key_words(s, weighted=True)
for key_word in key_words:
    print(key_word[0], 't', key_word[1])

pynlpir.close()

segment 切詞,返回tuple(token, pos),token切詞,pos 語言屬性。調用segment方法,指定pos_names參數'all' 、'child' 、'parent',默認parent 表示獲取詞性最頂級詞性。child 表示獲取詞性最具體信息。all 表示獲取詞性相關全部詞性信息,從頂級詞性到該詞性路徑。ui

詞性分類表。nlpir 源代碼 /pynlpir/pos_map.py,所有詞性分類及其子類別:翻譯

POS_MAP = {
    'n': ('名詞', 'noun', {
        'nr': ('人名', 'personal name', {
            'nr1': ('漢語姓氏', 'Chinese surname'),
            'nr2': ('漢語名字', 'Chinese given name'),
            'nrj': ('日語人名', 'Japanese personal name'),
            'nrf': ('音譯人名', 'transcribed personal name')
        }),
        'ns': ('地名', 'toponym', {
            'nsf': ('音譯地名', 'transcribed toponym'),
        }),
        'nt': ('機構團體名', 'organization/group name'),
        'nz': ('其它專名', 'other proper noun'),
        'nl': ('名詞性慣用語', 'noun phrase'),
        'ng': ('名詞性語素', 'noun morpheme'),
    }),
    't': ('時間詞', 'time word', {
        'tg': ('時間詞性語素', 'time morpheme'),
    }),
    's': ('處所詞', 'locative word'),
    'f': ('方位詞', 'noun of locality'),
    'v': ('動詞', 'verb', {
        'vd': ('副動詞', 'auxiliary verb'),
        'vn': ('名動詞', 'noun-verb'),
        'vshi': ('動詞"是"', 'verb 是'),
        'vyou': ('動詞"有"', 'verb 有'),
        'vf': ('趨向動詞', 'directional verb'),
        'vx': ('行事動詞', 'performative verb'),
        'vi': ('不及物動詞', 'intransitive verb'),
        'vl': ('動詞性慣用語', 'verb phrase'),
        'vg': ('動詞性語素', 'verb morpheme'),
    }),
    'a': ('形容詞', 'adjective', {
        'ad': ('副形詞', 'auxiliary adjective'),
        'an': ('名形詞', 'noun-adjective'),
        'ag': ('形容詞性語素', 'adjective morpheme'),
        'al': ('形容詞性慣用語', 'adjective phrase'),
    }),
    'b': ('區別詞', 'distinguishing word', {
        'bl': ('區別詞性慣用語', 'distinguishing phrase'),
    }),
    'z': ('狀態詞', 'status word'),
    'r': ('代詞', 'pronoun', {
        'rr': ('人稱代詞', 'personal pronoun'),
        'rz': ('指示代詞', 'demonstrative pronoun', {
            'rzt': ('時間指示代詞', 'temporal demonstrative pronoun'),
            'rzs': ('處所指示代詞', 'locative demonstrative pronoun'),
            'rzv': ('謂詞性指示代詞', 'predicate demonstrative pronoun'),
        }),
        'ry': ('疑問代詞', 'interrogative pronoun', {
            'ryt': ('時間疑問代詞', 'temporal interrogative pronoun'),
            'rys': ('處所疑問代詞', 'locative interrogative pronoun'),
            'ryv': ('謂詞性疑問代詞', 'predicate interrogative pronoun'),
        }),
        'rg': ('代詞性語素', 'pronoun morpheme'),
    }),
    'm': ('數詞', 'numeral', {
        'mq': ('數量詞', 'numeral-plus-classifier compound'),
    }),
    'q': ('量詞', 'classifier', {
        'qv': ('動量詞', 'verbal classifier'),
        'qt': ('時量詞', 'temporal classifier'),
    }),
    'd': ('副詞', 'adverb'),
    'p': ('介詞', 'preposition', {
        'pba': ('介詞「把」', 'preposition 把'),
        'pbei': ('介詞「被」', 'preposition 被'),
    }),
    'c': ('連詞', 'conjunction', {
        'cc': ('並列連詞', 'coordinating conjunction'),
    }),
    'u': ('助詞', 'particle', {
        'uzhe': ('着', 'particle 着'),
        'ule': ('了/嘍', 'particle 了/嘍'),
        'uguo': ('過', 'particle 過'),
        'ude1': ('的/底', 'particle 的/底'),
        'ude2': ('地', 'particle 地'),
        'ude3': ('得', 'particle 得'),
        'usuo': ('所', 'particle 所'),
        'udeng': ('等/等等/云云', 'particle 等/等等/云云'),
        'uyy': ('同樣/通常/似的/般', 'particle 同樣/通常/似的/般'),
        'udh': ('的話', 'particle 的話'),
        'uls': ('來說/來講/而言/說來', 'particle 來說/來講/而言/說來'),
        'uzhi': ('之', 'particle 之'),
        'ulian': ('連', 'particle 連'),
    }),
    'e': ('嘆詞', 'interjection'),
    'y': ('語氣詞', 'modal particle'),
    'o': ('擬聲詞', 'onomatopoeia'),
    'h': ('前綴', 'prefix'),
    'k': ('後綴', 'suffix'),
    'x': ('字符串', 'string', {
        'xe': ('Email字符串', 'email address'),
        'xs': ('微博會話分隔符', 'hashtag'),
        'xm': ('表情符合', 'emoticon'),
        'xu': ('網址URL', 'URL'),
        'xx': ('非語素字', 'non-morpheme character'),
    }),
    'w': ('標點符號', 'punctuation mark', {
        'wkz': ('左括號', 'left parenthesis/bracket'),
        'wky': ('右括號', 'right parenthesis/bracket'),
        'wyz': ('左引號', 'left quotation mark'),
        'wyy': ('右引號', 'right quotation mark'),
        'wj': ('句號', 'period'),
        'ww': ('問號', 'question mark'),
        'wt': ('歎號', 'exclamation mark'),
        'wd': ('逗號', 'comma'),
        'wf': ('分號', 'semicolon'),
        'wn': ('頓號', 'enumeration comma'),
        'wm': ('冒號', 'colon'),
        'ws': ('省略號', 'ellipsis'),
        'wp': ('破折號', 'dash'),
        'wb': ('百分號千分號', 'percent/per mille sign'),
        'wh': ('單位符號', 'unit of measure sign'),
    }),
}

參考資料:code

《Python 天然語言處理》orm

http://www.shareditor.com/blogshow?blogId=73

http://www.shareditor.com/blogshow?blogId=74

歡迎推薦上海機器學習工做機會,個人微信:qingxingfengzi

相關文章
相關標籤/搜索