人機交互方式愈來愈多的變成語音交互,用戶說出口語化的天然語言,系統須要正確理解並實現對應的操做。語音識別是另一個問題,本文討論語音識別後的文本處理。而音樂在人們生活中是剛需,amazon的echo、google的google home、訊飛京東的叮咚智能音箱、百度的對話式人工智能操做系統DuerOS等,如雨後春筍般爆發,對音樂的支持都是必須功能。正則表達式
首先就是信息的抽取,有2種方法基於規則和基於統計。規則就是含有目標信息的句子模式,用於指明構成目標信息的上下文約束環境,依賴於語言、領域,書寫規則的過程耗時且容易錯誤,但抽取效率和準確性高。基於統計的方法是利用人工標註的語料進行訓練,使用隱馬爾科夫模型、最大熵模型(CRF)、機率上下文無關語法(PCFG)等。因爲天然語言簡短半結構化,音樂類的實體名無規則(如「我愛你」就能抽出歌曲我、愛、你、我愛、我愛你、愛你6首歌),基於統計的模型不適合音樂領域,準確度不會過高,也很差泛化。
基於規則的抽取方法,一般須要詞典,如天氣領域能夠是城市名。但音樂領域把聽(張傑唱)、我(張國榮等唱)、南方(文雀唱)、看風景(嘉林唱)等歌曲名加入詞典的話,會對規則系統在歧義消除、系統複雜性、響應時間上有很大的挑戰。咱們須要另尋其餘的詞典。
用戶的query每每很簡短,主要有實體詞(忘情水)、意圖詞(唱個歌兒、放首等)2部分組成,實體詞不能做爲詞典,但音樂領域的意圖詞是能夠列舉的(咱們找到了764個),把意圖詞去掉剩下的部分就是與音樂相關的實體詞。less
句型規則用於得到主幹內容等其餘信息。句型規則由4部分組成(type, pattern, score, tendency)。機器學習
在得到主幹query(即音樂領域實體詞集合+少量未清理乾淨的噪音)後,咱們須要從中得到對應的音樂信息,如今問題就天然轉變爲了普通的關鍵詞搜索。所以咱們創建了音樂知識庫,doc包含歌名、歌手、歌手別名、專輯等,將成熟的信息搜索技術運用到天然語言理解中,既輕鬆解決了數據量大的問題,也保證了處理時間。學習
在選擇音樂的時候,咱們作了總體類似度和單field類似度兩種計算,用於實現music pick和field pick。類似度計算方法使用了兩種,編輯距離和相同字符,以應對不一樣的判斷狀況。相同字符公式以下:
其中a爲字符串b和c的相同字符個數,b和c爲兩字符串的各自長度,w爲各自權重。google
一個詞究竟是標籤仍是歌手、歌名,仍是專輯,或者這個詞只是歌名的一部分,再加上多標籤的狀況,這又是另一個複雜的問題。主要使用類似度、包含關係、標籤強烈程度、標籤組合狀況、句型規則等來進行區分判斷。人工智能
目前咱們支持以下的繼承,其中會有避免誤繼承的策略,如句型、知識庫驗證等。操作系統
一個智能聊天機器人或者智能音箱都是面向多個領域的,要避免音樂領域過召回的狀況,尤爲是歌名能夠是「對不起」。這部分工做利用了意圖詞得分、句型得分、命中field數、field與query的類似度、上下文狀況及query長度等信息。日誌
機器學習或者深度學習在NLP中都有很好的應用,如可使用embedding進行領域判斷。比較想作的一個是規則的自動提取,但願經過線上日誌+標註系統得到標註好的語料,利用這些語料自動生成句型規則,並補充意圖詞到意圖詞表中。使系統能夠不斷的自我提高,而不須要人工干預。
目前系統支持部分糾錯功能,如貝爾加湖畔能夠糾正爲貝加爾湖畔,這是用了搜索自有的特性。但對比較短的query以及拼音糾錯作的很差,但願在知識庫中增長拼音字段等其餘手段來進行完善。
功能還須要繼續擴展,如歌詞識別、否認支持、音樂圖譜、個性化推薦和搜索等。blog