Rasa_NLU分析

基本認(rèn)知

曾經(jīng)我認(rèn)為Rasa_NLU是一個(gè)意圖識(shí)別工具株憾,如今我意識(shí)到并不是操漠,Rasa_NLU只是一個(gè)自然語(yǔ)言理解(NLU:Natural Language Understanding的一個(gè)框架干发,它本身并不做任何識(shí)別的工作,真正的訓(xùn)練與識(shí)別工作是交由框架管理的各個(gè)組件來(lái)完成的殃姓。

Rasa_NLU框架的主要工作是:

  • 組件管理
  • 訓(xùn)練數(shù)據(jù)管理
  • 模型管理
  • 提供Http服務(wù)

大體結(jié)構(gòu)圖如下:

結(jié)構(gòu)圖

組件管理

前面說(shuō)過(guò)翔冀,Rasa NLU框架是通過(guò)管理的組件完成意圖識(shí)別的导街。而這個(gè)識(shí)別的過(guò)程并不是一步到位的披泪,需要多個(gè)組件的分工合作來(lái)完成纤子。組件之間就如同流水線作業(yè)一樣,每個(gè)組件處理加工輸入數(shù)據(jù)并輸出處理結(jié)果供其它組件使用或者是作為最終輸出款票。這樣控硼,可以為每個(gè)步驟提供不同的處理方式。

在介紹組件的管理之前艾少,先大概了解一下組件的類型及各個(gè)類型的工作職責(zé)卡乾,以便大致了解意圖識(shí)別的工作流程。組件的類型分為五類:

  • 初始化組件:作用是初始化其它組件工作所需的內(nèi)容缚够。代碼放在utils目錄下幔妨。目前包含了mitie_util與spacy_util兩個(gè)。
  • 分詞組件(tokenizer):作用是將輸入的句子切分成一個(gè)個(gè)單獨(dú)的詞谍椅。
  • 實(shí)體提取組件(extractor):作用是根據(jù)切分好的詞提取設(shè)定的關(guān)鍵詞误堡。
  • 特征提取組件(featurizer):作用是根據(jù)切分好的詞提取句子的特征。
  • 意圖識(shí)別組件(classifier):作用是根據(jù)提取出來(lái)的特征識(shí)別意圖雏吭。

框架將組件的配置存放在一個(gè)yml文件中锁施,示例:

pipeline:
- name: "nlp_mitie"
  model: "data/total_word_feature_extractor_zh.dat"
- name: "tokenizer_jieba"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"
- name: "intent_classifier_sklearn"

首先通過(guò)config加載配置文件,然后通過(guò)registry查找配置文件中組件名對(duì)應(yīng)的組件杖们,然后根據(jù)配置文件中每個(gè)組件指定的參數(shù)悉抵,初始化各個(gè)組件。

訓(xùn)練數(shù)據(jù)管理

訓(xùn)練數(shù)據(jù)的組織形式有兩種:?jiǎn)蝹€(gè)文件或者是一個(gè)目錄摘完。

如果是一個(gè)目錄時(shí)姥饰,該框架會(huì)自動(dòng)加載這個(gè)目錄下的全部文件數(shù)據(jù),并進(jìn)行合并孝治。在訓(xùn)練數(shù)據(jù)比較多時(shí)媳否,非常有利于訓(xùn)練數(shù)據(jù)的管理。

訓(xùn)練數(shù)據(jù)的格式也有兩種:JSON格式或者是Markdown格式荆秦。

JSON格式需要標(biāo)記實(shí)體在句子中的位置篱竭,而且比較繁瑣。因此個(gè)人比較喜歡使用Markdown格式步绸。

/*** JSON 格式 ***/
{
  "text": "show me chinese restaurants",
  "intent": "restaurant_search",
  "entities": [
    {
      "start": 8,
      "end": 15,
      "value": "chinese",
      "entity": "cuisine"
    }
  ]
}

/*** Markdown 格式 ***/
## intent:restaurant_search
- show me [chinese](cuisine) restaurant

顯然掺逼,Markdown格式比JSON格式要更清晰明了,也更容易標(biāo)記瓤介。如果已經(jīng)有了很多的JSON數(shù)據(jù)或者是只想保存JSON數(shù)據(jù)也沒(méi)有關(guān)系吕喘,框架還提供了convert可以輕松將JSON格式與Markdown格式互相轉(zhuǎn)換赘那。

訓(xùn)練數(shù)據(jù)的類型有四種:

  • 意圖(intent): 意圖就是普通的訓(xùn)練數(shù)據(jù),用于標(biāo)記句子意圖與句子中包含的實(shí)體氯质。
  • 同義詞(synonym): 同義詞的作用是在實(shí)體被提取出來(lái)后募舟,轉(zhuǎn)化為統(tǒng)一的詞敌土,以便于后續(xù)的處理锉试。
  • 正則表達(dá)式(regex): 正則表達(dá)式的作用是對(duì)于句子的,而不是實(shí)體绎秒,用于提供句子特征辕漂,以便于意圖的識(shí)別呢灶。
  • 查找表(lookup): 在框架的處理中會(huì)被理成一個(gè)大的正則表達(dá)式。
/*** JSON 格式 ***/
{
    "rasa_nlu_data": {
        "common_examples": [
            {
                "text": "hey",
                "intent": "greet"
            },
            {
                "text": "hello",
                "intent": "greet"
            }
        ],
        "entity_synonyms": [
            {
                "value": "savings",
                "synonyms": ["pink pig"]
            }
        ],
        "regex_features" : [
            {
                "name": "zipcode",
                "pattern": "[0-9]{5}"
            }
        ],
        "lookup_tables"  : [
            {
                "name": "currencies",
                "elements": ["Yen", "USD", "Euro"]
            },
            {
                "name": "additional_currencies",
                "elements": "path/to/currencies.txt"
            }
        ]
    }
}


/*** Markdown 格式 ***/

## intent:greet
- hey
- hello

## synonym:savings
- pink pig

## regex:zipcode
- [0-9]{5}

## lookup:currencies
- Yen
- USD
- Euro

## lookup:additional_currencies
path/to/currencies.txt

訓(xùn)練數(shù)據(jù)的加載

在框架源代碼中钉嘹,所有訓(xùn)練數(shù)據(jù)的處理代碼放在training_data包中鸯乃。通過(guò)包中的longing模塊加載目錄或文件中的各種格式的訓(xùn)練數(shù)據(jù)。然后實(shí)例化各訓(xùn)練數(shù)據(jù)結(jié)構(gòu)跋涣,以待各組件訓(xùn)練模型時(shí)使用缨睡。

模型管理

模型的結(jié)構(gòu)

在Rasa_NLU中有工程和模型的概念,換個(gè)說(shuō)法就是Rasa_NLU框架可以同時(shí)管理多個(gè)工程與模型陈辱。其結(jié)構(gòu)是模型的存儲(chǔ)目錄下可以有多個(gè)工程奖年,每個(gè)工程下又可以有多個(gè)模型。

模型的訓(xùn)練與存儲(chǔ)

在訓(xùn)練時(shí)性置,model模塊中的Trainer使用Pipeline中指定并通過(guò)config模塊加載完成的組件訓(xùn)練轉(zhuǎn)換完成的訓(xùn)練的數(shù)據(jù)拾并,然后通過(guò)persistor模塊將模型持久化。

persistor模塊中默認(rèn)存儲(chǔ)器可以將模型持久化到本地目錄鹏浅,同時(shí)還提供了一些可將模型持久化到云服務(wù)中的存儲(chǔ)器嗅义。

持久化的過(guò)程是初始化存儲(chǔ)器及模型路徑。如果沒(méi)有指定工程及模型隐砸,模型將會(huì)被存儲(chǔ)在default工程下的一個(gè)由框架生成的模型中之碗,模型名為當(dāng)前時(shí)間。然后季希,再依次調(diào)用各個(gè)組件褪那,將各個(gè)組件中的模型數(shù)據(jù)持久化。最后將Pipeline持久化到指定模型的Metadata.json中式塌。

模型訓(xùn)練與存儲(chǔ)的大致流程

模型的加載與使用

在訓(xùn)練完成并持久化存儲(chǔ)后博敬,可以通過(guò)加載這個(gè)模型用來(lái)提取句子的意圖及包含的實(shí)體。前面有說(shuō)到該框架有工程與模型的概念峰尝,對(duì)應(yīng)的偏窝,在代碼中也有相關(guān)的管理代碼。通過(guò)project來(lái)加載工程,model來(lái)加載模型祭往。主要邏輯包含了默認(rèn)模型的加載伦意,default工程下最新訓(xùn)練的模型,指定工程與模型的加載硼补、以及加載遠(yuǎn)程云服務(wù)中存儲(chǔ)的模型等驮肉。

提供Http服務(wù)

Rasa_NLU框架還可以直接啟動(dòng)一個(gè)Web Service服務(wù),以便于遠(yuǎn)程訪問(wèn)已骇。服務(wù)提供了模型的訓(xùn)練离钝、句子意圖的分析、模型的評(píng)估等基本功能疾捍,還提供了模型的加載奈辰、卸載栏妖、服務(wù)狀態(tài)等功能乱豆。

框架通過(guò)server模塊啟動(dòng)服務(wù)并接收http請(qǐng)求,然后再使用data_router模塊分發(fā)使用各個(gè)功能模塊吊趾,執(zhí)行請(qǐng)求的操作宛裕。

框架還通過(guò)在data_router中組合emulator,通過(guò)各emulator的實(shí)現(xiàn)格式化服務(wù)輸出結(jié)過(guò)的格式论泛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末揩尸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子屁奏,更是在濱河造成了極大的恐慌岩榆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坟瓢,死亡現(xiàn)場(chǎng)離奇詭異勇边,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)折联,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門粒褒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诚镰,你說(shuō)我怎么就攤上這事奕坟。” “怎么了清笨?”我有些...
    開(kāi)封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵月杉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抠艾,道長(zhǎng)苛萎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮首懈,結(jié)果婚禮上绊率,老公的妹妹穿的比我還像新娘。我一直安慰自己究履,他們只是感情好滤否,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著最仑,像睡著了一般藐俺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泥彤,一...
    開(kāi)封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天欲芹,我揣著相機(jī)與錄音,去河邊找鬼吟吝。 笑死菱父,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剑逃。 我是一名探鬼主播浙宜,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛹磺!你這毒婦竟也來(lái)了粟瞬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萤捆,失蹤者是張志新(化名)和其女友劉穎裙品,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體俗或,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡市怎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕴侣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焰轻。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昆雀,靈堂內(nèi)的尸體忽然破棺而出辱志,到底是詐尸還是另有隱情,我是刑警寧澤狞膘,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布揩懒,位于F島的核電站,受9級(jí)特大地震影響挽封,放射性物質(zhì)發(fā)生泄漏已球。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望智亮。 院中可真熱鬧忆某,春花似錦、人聲如沸阔蛉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)状原。三九已至聋呢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颠区,已是汗流浹背削锰。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毕莱,地道東北人器贩。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像央串,于是被迫代替她去往敵國(guó)和親磨澡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碗啄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前面的文章主要從理論的角度介紹了自然語(yǔ)言人機(jī)對(duì)話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識(shí)质和。這篇文章,甚至之后...
    我偏笑_NSNirvana閱讀 13,924評(píng)論 2 64
  • 一. 任務(wù)驅(qū)動(dòng)與非任務(wù)驅(qū)動(dòng)型對(duì)話系統(tǒng) 目標(biāo)驅(qū)動(dòng)型人機(jī)對(duì)話系統(tǒng):通過(guò)與用戶進(jìn)行多輪基于自然語(yǔ)言的對(duì)話來(lái)逐步收集與目標(biāo)...
    是neinei啊閱讀 8,214評(píng)論 0 12
  • Training spaCy’s Statistical Models訓(xùn)練spaCy模型 This guide d...
    Joe_Gao_89f1閱讀 6,544評(píng)論 1 5
  • Day7:每年白撿幾百塊稚字,你要不要 1.國(guó)債逆回購(gòu):就是金融機(jī)構(gòu)把國(guó)債抵押給你饲宿,找你借錢 2.穩(wěn)賺不賠的奧秘 企...
    一只有靈魂的豬閱讀 202評(píng)論 0 1
  • 路上的行人在我看來(lái)比線上頭條的當(dāng)事人還要陌生,然而這也不是我在路上會(huì)生氣的原因胆描,主要是排隊(duì)使我火大瘫想。無(wú)論男女老少,...
    冷熱酸甜閱讀 456評(píng)論 3 2