1. 自然語言處理怎麼最快入門
自然語言處理(簡稱NLP),是研究計算機處理人類語言的一門技術,包括:
1.句法語義分析:對於給定的句子,進行分詞、詞性標記、命名實體識別和鏈接、句法分析、語義角色識別和多義詞消歧。
2.信息抽取:從給定文本中抽取重要的信息,比如,時間、地點、人物、事件、原因、結果、數字、日期、貨幣、專有名詞等等。通俗說來,就是要了解誰在什麼時候、什麼原因、對誰、做了什麼事、有什麼結果。涉及到實體識別、時間抽取、因果關系抽取等關鍵技術。
3.文本挖掘(或者文本數據挖掘):包括文本聚類、分類、信息抽取、摘要、情感分析以及對挖掘的信息和知識的可視化、互動式的表達界面。目前主流的技術都是基於統計機器學習的。
4.機器翻譯:把輸入的源語言文本通過自動翻譯獲得另外一種語言的文本。根據輸入媒介不同,可以細分為文本翻譯、語音翻譯、手語翻譯、圖形翻譯等。機器翻譯從最早的基於規則的方法到二十年前的基於統計的方法,再到今天的基於神經網路(編碼-解碼)的方法,逐漸形成了一套比較嚴謹的方法體系。
5.信息檢索:對大規模的文檔進行索引。可簡單對文檔中的詞彙,賦之以不同的權重來建立索引,也可利用1,2,3的技術來建立更加深層的索引。在查詢的時候,對輸入的查詢表達式比如一個檢索詞或者一個句子進行分析,然後在索引裡面查找匹配的候選文檔,再根據一個排序機制把候選文檔排序,最後輸出排序得分最高的文檔。
6.問答系統: 對一個自然語言表達的問題,由問答系統給出一個精準的答案。需要對自然語言查詢語句進行某種程度的語義分析,包括實體鏈接、關系識別,形成邏輯表達式,然後到知識庫中查找可能的候選答案並通過一個排序機制找出最佳的答案。
7.對話系統:系統通過一系列的對話,跟用戶進行聊天、回答、完成某一項任務。涉及到用戶意圖理解、通用聊天引擎、問答引擎、對話管理等技術。此外,為了體現上下文相關,要具備多輪對話能力。同時,為了體現個性化,要開發用戶畫像以及基於用戶畫像的個性化回復。
隨著深度學習在圖像識別、語音識別領域的大放異彩,人們對深度學習在NLP的價值也寄予厚望。再加上AlphaGo的成功,人工智慧的研究和應用變得炙手可熱。自然語言處理作為人工智慧領域的認知智能,成為目前大家關注的焦點。很多研究生都在進入自然語言領域,寄望未來在人工智慧方向大展身手。但是,大家常常遇到一些問題。俗話說,萬事開頭難。如果第一件事情成功了,學生就能建立信心,找到竅門,今後越做越好。否則,也可能就灰心喪氣,甚至離開這個領域。這里針對給出我個人的建議,希望我的這些粗淺觀點能夠引起大家更深層次的討論。
2. 自然語言處理的一般步驟
自然語言處理(NLP)關注的是人類的自然語言與計算機設備之間的相互關系。NLP是計算機語言學的重要方面之一,它同樣也屬於計算機科學和人工智慧領域。而文本挖掘和NLP的存在領域類似,它關注的是識別文本數據中有趣並且重要的模式。
但是,這二者仍有不同。首先,這兩個概念並沒有明確的界定(就像「數據挖掘」和「數據科學」一樣),並且在不同程度上二者相互交叉,具體要看與你交談的對象是誰。我認為通過洞見級別來區分是最容易的。如果原始文本是數據,那麼文本挖掘就是信息,NLP就是知識,也就是語法和語義的關系。
雖然NLP和文本挖掘不是一回事兒,但它們仍是緊密相關的:它們處理同樣的原始數據類型、在使用時還有很多交叉。
我們的目的並不是二者絕對或相對的定義,重要的是要認識到,這兩種任務下對數據的預處理是相同的。
努力消除歧義是文本預處理很重要的一個方面,我們希望保留原本的含義,同時消除噪音。
以下就是處理文本任務的幾大主要步驟:
1.數據收集
獲取或創建語料庫,來源可以是郵箱、英文維基網路文章或者公司財報,甚至是莎士比亞的作品等等任何資料。
2.數據預處理
在原始文本語料上進行預處理,為文本挖掘或NLP任務做准備
數據預處理分為好幾步,其中有些步驟可能適用於給定的任務,也可能不適用。但通常都是標記化、歸一化和替代的其中一種。
3.數據挖掘和可視化
無論我們的數據類型是什麼,挖掘和可視化是探尋規律的重要步驟
常見任務可能包括可視化字數和分布,生成wordclouds並進行距離測量
4.模型搭建
這是文本挖掘和NLP任務進行的主要部分,包括訓練和測試
在適當的時候還會進行特徵選擇和工程設計
語言模型:有限狀態機、馬爾可夫模型、詞義的向量空間建模
機器學習分類器:樸素貝葉斯、邏輯回歸、決策樹、支持向量機、神經網路
序列模型:隱藏馬爾可夫模型、循環神經網路(RNN)、長短期記憶神經網路(LSTMs)
5.模型評估
模型是否達到預期?
度量標准將隨文本挖掘或NLP任務的類型而變化
以上觀點僅供參考,而在自然語言文本預處理方面的技術在國內效果比較好的並不多,具有代表性的如:北理工張華平博士的NLPIR大數據語義智能分析技術。NLPIR大數據語義智能分析平台是根據中文數據挖掘的綜合需求,融合了網路精準採集、自然語言理解、文本挖掘和語義搜索的研究成果,並針對互聯網內容處理的全技術鏈條的共享開發平台。如果感興
3. 自然語言處理_一般處理流程
一、一般處理流程
語料獲取 -> 文本預處理 -> 特徵工程 -> 特徵選擇
1、語料獲取
即需要處理的數據及用於模型訓練的語料。
數據源可能來自網上爬取、資料積累、語料轉換、OCR轉換等,格式可能比較混亂。需要將url、時間、符號等無意義內容去除,留下質量相對較高的非結構化數據。
2、文本預處理
將含雜質、無序、不標準的自然語言文本轉化為規則、易處理、標準的結構化文本。
①處理標點符號
可通過正則判定、現有工具(zhon包)等方式篩選清理標點符號。
②分詞
將連續的自然語言文本,切分成具有語義合理性和完整性的詞彙序列的過程。
一般看來英文較容易可通過空格符號分詞,中文相對復雜,參考結巴分詞、盤古分詞、Ansj等工具。
常見的分詞演算法有:基於字元串匹配的分詞方法、基於理解的分詞方法、基於統計的分詞方法和基於規則的分詞方法,每種方法下面對應許多具體的演算法。
③詞性標注
為自然語言文本中的每個詞彙賦予一個詞性的過程,如名詞、動詞、副詞等。可以把每個單詞(和它周圍的一些額外的單詞用於上下文)輸入預先訓練的詞性分類模型。
常用隱馬爾科夫模型、N 元模型、決策樹
④stop word
英文中含大量 a、the、and,中文含大量 的、是、了、啊,這些語氣詞、助詞沒有明顯的實際意義,反而容易造成識別偏差,可適當進行過濾。
⑤詞形還原
偏向於英文中,單數/復數,主動/被動,現在進行時/過去時/將來時等,還原為原型。
⑥統計詞頻
因為一些頻率過高/過低的詞是無效的,對模型幫助很小,還會被當做雜訊,做個詞頻統計用於停用詞表。
⑦給單詞賦予id
給每一個單詞一個id,用於構建詞典,並將原來的句子替換成id的表現形式
⑧依存句法分析
通過分析句子中詞與詞之間的依存關系,從而捕捉到詞語的句法結構信息(如主謂、動賓、定中等結構關系),並使用樹狀結構來表示句子的句法結構信息(如主謂賓、定狀補等)。
3、特徵工程
做完語料預處理之後,接下來需要考慮如何把分詞之後的字和詞語表示成計算機能夠計算的類型。
如果要計算我們至少需要把中文分詞的字元串轉換成數字,確切的說應該是數學中的向量。有兩種常用的表示模型分別是詞袋模型和詞向量。
①詞向量
詞向量是將字、詞語轉換成向量矩陣的計算模型。目前為止最常用的詞表示方法是 One-hot,這種方法把每個詞表示為一個很長的向量。
②詞袋模型
即不考慮詞語原本在句子中的順序,直接將每一個詞語或者符號統一放置在一個集合(如 list),然後按照計數的方式對出現的次數進行統計。統計詞頻這只是最基本的方式,TF-IDF 是詞袋模型的一個經典用法。
常用的表示模型有:詞袋模型(Bag of Word, BOW),比如:TF-IDF 演算法;詞向量,比如 one-hot 演算法、word2vec 演算法等。
4、特徵選擇
在文本挖掘相關問題中,特徵工程也是必不可少的。在一個實際問題中,構造好的特徵向量,是要選擇合適的、表達能力強的特徵。
舉個自然語言處理中的例子來說,我們想衡量like這個詞的極性(正向情感還是負向情感)。我們可以預先挑選一些正向情感的詞,比如good。然後我們算like跟good的PMI,用到點互信息PMI這個指標來衡量兩個事物之間的相關性。
特徵選擇是一個很有挑戰的過程,更多的依賴於經驗和專業知識,並且有很多現成的演算法來進行特徵的選擇。目前,常見的特徵選擇方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六種。
5、模型訓練
在特徵向量選擇好了以後,接下來要做的事情是根據應用需求來訓練模型,我們使用不同的模型,傳統的有監督和無監督等機器學習模型,如 KNN、SVM、Naive Bayes、決策樹、GBDT、K-means 等模型;深度學習模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。這些模型在分類、聚類、神經序列、情感分析等應用中都會用到。
當選擇好模型後,則進行模型訓練,其中包括了模型微調等。在模型訓練的過程中要注意由於在訓練集上表現很好,但在測試集上表現很差的過擬合問題以及模型不能很好地擬合數據的欠擬合問題。同時,也要防止出現梯度消失和梯度爆炸問題。
6、模型評估
在機器學習、數據挖掘、推薦系統完成建模之後,需要對模型的效果做評價。模型的評價指標主要有:錯誤率、精準度、准確率、召回率、F1 值、ROC 曲線、AUC 曲線等。
7、投產上線
模型的投產上線方式主要有兩種:一種是線下訓練模型,然後將模型進行線上部署提供服務;另一種是在線訓練模型,在線訓練完成後將模型 pickle 持久化,提供對外服務。
三、NLP應用方向
1、命名實體識別
指識別自然語言文本中具有特定意義的實體,主要包括人名、地名、機構名、時間日期等。
傳統機器學習演算法主要有HMM和CRF,深度學習常用QRNN、LSTM,當前主流的是基於bert的NER。
2、情感分析
文本情感分析和觀點挖掘(Sentiment Analysis),又稱意見挖掘(Opinion Mining)是自然語言處理領域的一個重要研究方向。簡單而言,是對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理的過程。
情感分析技術可以分為兩類,一類是基於機器學習的方法,通過大量有標注、無標注的主觀語料,使用統計機器學習演算法,通過提取特徵,進行文本情感分析。另一類是基於情感詞典的方法,根據情感詞典所提供的詞的情感極性(正向、負向),從而進行不同粒度的(詞語、短語、屬性、句子、篇章)下的文本情感分析。
3、文章標簽
文章標簽是利用機器學習演算法,對文章進行文字和語義的分析後,提取出若干個重要的詞或者短語(關鍵短語)。關鍵短語是NLP基礎的演算法模塊,有了關鍵短語,能為後續的搜索、推薦等更高級的應用提供有力的抓手。
適用場景:1、個性化推薦:通過對文章的標簽計算,結合用戶畫像,精準的對用戶進行個性化推薦;2、話題聚合:根據文章計算的標簽,聚合相同標簽的文章,便於用戶對同一話題的文章進行全方位的信息閱讀;3、搜索:使用中心詞可以對query進行相似度計算、聚類、改寫等,可以用於搜索相關性計算。
4、案件串並
①信息抽取
運用實體抽取、關系抽取,從案情中抽取關鍵信息,如從警情中可以抽取報警人項目、報警人電話、案發地址等信息
②實體對齊
相同的實體在不同的案情中會有不同的表述,會給串並帶來困難。可針對地址、人名、組織名進行對齊處理。
③文本聚類
對於關鍵片段類信息,無法像實體那樣對齊,需要藉助文本聚類技術進行關聯。
④構建圖譜
將信息抽取結果存入圖譜。每個警情id對應一個節點,實體、屬性、關鍵片段作為節點,對齊的實體、同一類的文本存為同一個節點。
除了來自於從警情中抽取的信息,還可以將其他警務系統中存在的結構化數據導入(如來自戶籍信息的人物關系),從而豐富圖譜。
⑤圖譜檢索
完成以上工作,即完成了案件串並的必要基礎建設,接下來通過圖譜的查詢功能自動完成案件的串並。首先需要設定串並的條件,案件串並的條件在警務實戰中已有很多的積累,如「具有相似的作案手段」,又如「相似作案手段,嫌疑人有共同聯系人」,只需要將這些條件用圖譜查詢語言表達出來。
4. (轉)設計一個語音交互界面(Voice User Interface)
此文為Medium上的一篇文章,搬運過來供自己和大家學習下。原文鏈接
https://medium.com/@xuuuwj/%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%AF%AD%E9%9F%B3%E4%BA%A4%E4%BA%92%E7%95%8C%E9%9D%A2-voice-user-interface-1-6364d4529a28
去年11月第一次接觸VUI Design以來,已有三個多月,期間憑著網上的資料(主要是google designguideline\eros.com\設計師手記\論文)以及自己的UX知識,我嘗試設計了三個項目: 一個買書的skill 、一款智能音箱語音交互游戲、 一個關於中國電信100M寬頻業務的微信咨 詢機器人 ,前兩個項目做到原型為止,最後一個已經在微信公眾號後台實現。但這三個項目的重點都被放在conversation design上,並不能算完整意義上的VUI。
本月剛剛讀完 Cathy Pearl 的《語音用戶界面設計》(《Designing Voice User Interface》) 和《Voice User Interface Design》(By Michael H. Cohen, James P. Giangola, Jennifer Balogh),書中完整地討論了VUI設計的基本原則、重要的技術模塊以及用戶測試等問題,幫助勾畫出了一張比較完整的VUI Design全景圖。
在接下來的文章中,我會嘗試用一個happy path串連起由0到1設計一個語音交互界面的過程,希望能定義好每個小框架中的設計問題,然後把它們變作一種肌肉記憶。
By the way, 因為說話這件事情太本能了,所以我覺得設計VUI困難的一點在於怎樣從用戶思維中跳出來,讓自己重新回到設計師的角色上:)
語音界面的優勢主要體現在三個方面:一是速度,包括輸入更方便、入口更淺、學習負擔更小等;二是共時,比如允許多任務同時進行;三是探索性,更能激發用戶的好奇心,提升用戶體驗。不過同時,也不要忘記語音交流是非常受場景、技術及用戶習慣限制的一件事。
可以參考 Google-fit-quiz 里的問題,來驗證VUI究竟是不是你的最佳選擇。
在回答之前,我們需要先了解:1.用戶進行語音交互的方式有哪些,2.VUI系統內部是如何運作的。
The Nielson Norman Group 將語音交互總結為以下屏幕優先、純語音和語音優先三種模式:
📱 Screen-first Interaction(屏幕優先): Here, we start with an application designed primarily for screen, and voice controls are added afterwards to enhance the experience.(設計一個以屏幕顯示為主的App, 為了提升用戶體驗,會加一些語音元素)
🗣 Voice-only Interaction(只有語音交互): Here there is no screen at all, and input and output is based on sound, such as a smart speaker.(VUI設備沒有屏幕,輸入和輸出都要聲音,比如智能揚聲器)
💬 Voice-first Interaction(語音優先): This is where an app designed primarily for voice is enhanced through the addition of a screen to output information.(以語音為主要交互方式的App,輸出信息在屏幕上顯示,通過這種方式提升App體驗)
屏幕優先 的情況下,最典型的代表就是手機語音助手,用戶不僅可以通過語音,還可以通過鍵入、手勢來進行操作,系統回復的內容也包含了語音、文本、圖片、列表、鏈接等等。
純語音交互 的代表之一是智能音箱,用戶通過「喚醒」詞,比如「 Alexa」,來開啟VUI交互;另一個代表是電話客服,也就是互動式語音應答(Interactive Voice Response, IVR),它可以通過電話線路理解人們的請求並指引用戶完成相應的任務,比如預定機票、查詢話費等。
可以把對話系統看作人機翻譯機,接收人類的自然語言並把它翻譯成計算機能懂的結構化語言,以便進行信息匹配與加工,最終再以自然語言的形式反饋給說話者,完成一次「溝通」。「溝通」的本質是通過對最優解的一步步預測,以生成一個匹配概率盡可能高的反饋,需要計算能力、演算法與數據的背後支持。
具體情況如下圖所示:
當用戶對系統講話(utterance),系統會首先通過 語音識別(ASR) ①接收並解析語音,識別器可以提供多個可能的結果,即N-best list,從中為接收到的語音匹配最相似的詞串文本(recognition hypothesis),然後反饋給下一個自然 語言理解(NLU) ②模塊。
理解自然語言,即系統通過對詞法、句法、語義的分析,識別(identify)用戶的意圖(intent)或者用戶言語所涉及的領域(domain)、實體(entities),生成一個結構化的 語義表示*, 包括語言類型(陳述需求,詢問屬性,否定,選擇疑問,等等)和條件信息(有什麼條件、值是多少)。比如,「幫我查深圳的天氣」這句話對應的語義表示為「inform(occasion=天氣,location=深圳)」,其中「inform」代表「陳述需求」,括弧裡面的內容我們稱之為slot-value pair。關於計算機是如何理解自然語言的,可以點擊 這里 詳細了解。
語義表示生成之後被轉交給 對話管理器(DM) ③,由對話管理器來決定答復給用戶什麼以及怎樣答復。
對話管理器是對話系統中很關鍵的一個模塊,連結著一個或多個 知識庫(Knowledge Base, KB) ④。通常包括:a.對話狀態跟蹤(dialogue state tracking),比如追蹤執行用戶意圖所需的信息是否完整;b.對話策略(dialogue policy),即根據當前的狀態 決策 下一步應該採取的最優動作,比如,是直接調用知識庫(knowledge base)內容提供結果、詢問特定限制條件、澄清或確認需求、還是開啟相關的某個軟體呢。
不同的對話系統,goal-driven system(比如任務型、問答型)和open-domain system(比如閑聊型),對話管理器的任務、知識庫內容也不同。
任務型對話的場景相對復雜,通常會與用戶進行多倫對話,需要參數化請求並通過slots filling的形式持續跟蹤對話,直到識別出用戶意圖、特徵詞、slot-value pairs,即系系統要執行的動作的類型和操作參數。
問答型則不需要考慮復雜的對話邏輯,通常一輪對話就可以解決,重點在於語義解析與實體匹配。
閑聊型包括檢索模式和生成模式,檢索式是利用網路中已有的大量對話語料來構建索引,從索引中查找可能的候選回復,而生成式則直接從大量的人人的對話中學習對話模型,然後利用對話模型「創作」回復。
對話管理器會根據當前的對話狀態生成一個預期回復(intended response),然後進入 自然語言生成(NLG) ⑤- 文本轉語音(TTS) ⑥環節,把結構化的預期回復改造成自然語言,最終呈現給用戶。
常見的說法是「系統形象(system persona)」,相當於產品的前端,即系統通過的①語音特徵,語氣、語調、音色、節奏等。你可以選擇使用合成(synthesized)聲音,也可以選擇錄制的(recorded)聲音;
②話術,編寫問候語、特殊應答、提示語等時的用詞、長短句這些,來展現與品牌相符的性格特質,比如親切or正式,主動or順從。
一個好的system persona能夠很自然地成為你編寫對話時的參考條件:「在這種情況下,這個persona會說什麼或做什麼?」
VUI的交互方式與對話內容很難徹底分開討論,但做這種嘗試,有助於跳出用戶視角,走進「黑盒子」中。
我傾向於將「交互方式」看作《Voice User Interface Design》中所言的「High-level design」,而將「對話內容」看作「Detailed design」。
「High-level design」關心的是怎樣推動對話流暢地進行,讓用戶知曉系統的狀態、任務進度等以便操作,比如系統在聆聽、在期待收到指令、已離線等,可以理解為GUI中的彈窗、動效、視覺反饋等。
同時也為系統設計更好的規則,以便它做出更好的決策,比如在什麼情況下需要向用戶確認請求,可以理解為GUI設計中看不見的菱形判斷框。
這些問題主要涉及到以下:
①對話模式設計
A.命令-控制式(command and control),即用戶想要說話時必須先喚醒系統,方式可以是使用喚醒詞、手勢觸摸或者按鍵。一輪對話完畢,用戶須再次喚醒系統以開啟下一輪對話。
B.對話式,即在一段封閉的對話期間,比如完成某項特定的任務時,用戶不必每一回合都喚醒系統,而是自然地進行話輪轉換,在輪到用戶說話時系統自動開啟麥克風。
C.混合式,即命控式與對話式的結合,系統向用戶提供明顯的狀態切換標識,比如使用聲音標志(earcon)以表示某個狀態的開始與結束。
②對話策略(dialog strategy)設計
包括:
A.對話框架設計,即對話組織策略
《Designing Voice User Interface》一書把對話框架分為:a.定向對話(directed dialog),即系統主導對話,向用戶詢問非常具體的問題,以期望獲得同樣具體的答案;b.菜單層級結構(menu hierarchy),即系統向用戶提供一系列選擇,一旦用戶完成了菜單a的選擇,系統會繼續提供菜單b,直到完成用戶的請求;c.混合推動(mixed-initiative),即定向對話與菜單層級相混合,系統詢問用戶問題,也允許用戶通過提供額外的信息來引導對話。
B.對話修補策略
技術並不完美,識別器可能還沒有準備好接受呼叫者的話語,或者沒有接收到說話者的語音,也可能響應時間太長 。用戶也常常會突然扭轉話題,或者提供太多信息。因此在正向推動對話之外,系統也必須配備處理這些情況的策略,以減少前功盡棄的概率。
a.錯誤恢復
可能出現的錯誤有以下四種:
·未檢測到語音
·檢測到語音,但沒有識別
·正確識別語音,但無法處理
·部分語音識別錯誤
·延遲
一般有兩種方法來處理這些情況,明確地說出來,最好能增加更多的細節讓用戶明白現在的狀況,比如「抱歉,我沒聽懂,請說出您所在的城市和區域名稱」,或者什麼也不做。如何選擇要取決於VUI系統的交互模式與用戶場景。
b.萬能指令
比如「幫助」、「停止」、「請重復一遍」、「退出」等等。設計時不僅要考慮用戶可能的需要,也要考慮用戶會怎樣表達這些需要。
③條件閾值(threshold)設計
每個應用程序都會定義系統能承受的最大錯誤,對話系統也不例外,尤其是上文對交互流程的描述也向我們清晰地展示了,從用戶、到技術模塊、再到數據資源,VUI的運行充滿了不確定性。
《Designing Voice User Interface》 一書建議我們考慮設置三種閾值:單個對話狀態中的最大連續錯誤數(特定於狀態的錯誤計數),全局計算的最大錯誤數,以及最大錯誤確認數。
牢記這一點便很容易理解Detailed design需要做什麼,即深入到單條對話中,詳細設計對話流程、輔助提示、以及異常情況處理方案。包括:
①對話設計
設計對話流程很像寫劇本,即什麼樣的角色在什麼情況下應該說什麼話,不同之處在於對話系統的情節和部分角色是寫定的。
各大平台上,Google、Amazon、Microsoft,都有對話設計的相關指導,可以通過 這篇匯總文章 來進一步了解。
②提示列表(prompt lists)
回想一下,人與人之間的溝通也要建立在共同知識的基礎上,與機器對話也是一樣。讓用戶了解系統能做什麼、不能做什麼、怎麼做是對的等等,才能夠實現高效率的對話。
這一點可以通過設計提示列表(prompt lists)來輔助實現,提示類型包括:
A.初始提示,
B.錯誤提示,
C.幫助提示,
D.特殊應答等等
提示的形式有多種,語音、文本、圖像,甚至聲音,都可以。
比如圖中Google assistant採用帶有文字的按鈕來告訴我它能識別屏幕上的內容,而我只需點擊或者說出指令即可;右邊的兩張圖里,Google通過[視覺元素變換+「進入對話」「離開對話」的文字提示+音效(earcon)]來隱喻游戲的開始與結束。
Google在designguideline for Google assistant里總結了 他們運用在提示語(prompt)中的不同元素(types of conversational components) ,是一份非常好的參考。
設計過程其實與一般產品並無大異,需要考慮:
1). 用戶研究結果。 包括用例、使用場景 、用戶語言模式與心理模式等。可以參考博主@Lu的設計手記 《語音理財案例分析》 。
2). 業務場景與目標。 主要是據此確定功能列表、功能優先順序、交互方式等。推薦網路AI社區的 《酒店語音助手實例教程》 。
特殊的是,人工智慧產品的形態多種多樣,設計師必須對於產品所依附的硬體設備、產品背後的數據與技術支持有所了解,以確定產品邊界、發現設計機會、持續優化用戶體驗。因此也需要考慮:
3). 技術與硬體基礎。
比如設備聯網程度,ASR引擎是否允許你設置N-best列表、自定義語音終止超時的時長,系統的負載量等。
4). 數據資源。
比如當前資源是否能滿足該功能,哪些數據會影響系統響應時間等。
人們往往通過語音識別准確度來評估應用程序的運行效果,這也許是最糟糕的度量方式。一個應用程序能達到90%的識別准確度,同時自動實現85%的業務呼叫;另一個應用程序達到97%的識別准確度,且自動實現40%的業務呼叫,前者就一定比後者更差或更好嗎?
——《如何構建語音識別應用》( Bruce Balentine, David Morgen)
評估涉及到三個問題:
1.如何定義成功
需要與開發人員、客戶共同完成,以方便確定哪些狀態是可以衡量的,哪些不可以。盡可能將成功狀態具體化、數字化。
以下使一些成功標準的示例:
·60%想要預定酒店的用戶最終完成了預定。
·85%的用戶在1個月內至少完成了20天的每日健康記錄。
·播放歌曲的錯誤率低於15%。
——《語音用戶界面設計》Cathy Pearl
2.可以通過什麼來衡量
A.任務完成率
B.用戶(在何處)(因為什麼)流失率
C.使用時長
D.語音打斷情況
E.高頻異常情況
……
*如果不思考原因,以上所有衡量結果都不可用
3.如何獲得衡量數據
A.在早期建立記錄日誌
B.轉錄用戶呼叫記錄
……
參考資料:
《語音用戶界面設計》Cathy Pearl
《Voice User Interface Design》Michael H. Cohen, James P. Giangola, Jennifer Balogh
網路AI社區
Google Design Guideline
Cortana Dev Center
Nielsen Norman Group
https://voiceprinciples.com/
《周耀明:自然語言對話引擎》
機器之心
5. 自然語言處理的詳細介紹
語言是人類區別其他動物的本質特性。在所有生物中,只有人類才具有語言能力。人類的多種智能都與語言有著密切的關系。人類的邏輯思維以語言為形式,人類的絕大部分知識也是以語言文字的形式記載和流傳下來的。因而,它也是人工智慧的一個重要,甚至核心部分。
用自然語言與計算機進行通信,這是人們長期以來所追求的。因為它既有明顯的實際意義,同時也有重要的理論意義:人們可以用自己最習慣的語言來使用計算機,而無需再花大量的時間和精力去學習不很自然和習慣的各種計算機語言;人們也可通過它進一步了解人類的語言能力和智能的機制。
實現人機間自然語言通信意味著要使計算機既能理解自然語言文本的意義,也能以自然語言文本來表達給定的意圖、思想等。前者稱為自然語言理解,後者稱為自然語言生成。因此,自然語言處理大體包括了自然語言理解和自然語言生成兩個部分。歷史上對自然語言理解研究得較多,而對自然語言生成研究得較少。但這種狀況已有所改變。
無論實現自然語言理解,還是自然語言生成,都遠不如人們原來想像的那麼簡單,而是十分困難的。從現有的理論和技術現狀看,通用的、高質量的自然語言處理系統,仍然是較長期的努力目標,但是針對一定應用,具有相當自然語言處理能力的實用系統已經出現,有些已商品化,甚至開始產業化。典型的例子有:多語種資料庫和專家系統的自然語言介面、各種機器翻譯系統、全文信息檢索系統、自動文摘系統等。
自然語言處理,即實現人機間自然語言通信,或實現自然語言理解和自然語言生成是十分困難的。造成困難的根本原因是自然語言文本和對話的各個層次上廣泛存在的各種各樣的歧義性或多義性(ambiguity)。
一個中文文本從形式上看是由漢字(包括標點符號等)組成的一個字元串。由字可組成詞,由詞可組成片語,由片語可組成句子,進而由一些句子組成段、節、章、篇。無論在上述的各種層次:字(符)、詞、片語、句子、段,……還是在下一層次向上一層次轉變中都存在著歧義和多義現象,即形式上一樣的一段字元串,在不同的場景或不同的語境下,可以理解成不同的詞串、片語串等,並有不同的意義。一般情況下,它們中的大多數都是可以根據相應的語境和場景的規定而得到解決的。也就是說,從總體上說,並不存在歧義。這也就是我們平時並不感到自然語言歧義,和能用自然語言進行正確交流的原因。但是一方面,我們也看到,為了消解歧義,是需要極其大量的知識和進行推理的。如何將這些知識較完整地加以收集和整理出來;又如何找到合適的形式,將它們存入計算機系統中去;以及如何有效地利用它們來消除歧義,都是工作量極大且十分困難的工作。這不是少數人短時期內可以完成的,還有待長期的、系統的工作。
以上說的是,一個中文文本或一個漢字(含標點符號等)串可能有多個含義。它是自然語言理解中的主要困難和障礙。反過來,一個相同或相近的意義同樣可以用多個中文文本或多個漢字串來表示。
因此,自然語言的形式(字元串)與其意義之間是一種多對多的關系。其實這也正是自然語言的魅力所在。但從計算機處理的角度看,我們必須消除歧義,而且有人認為它正是自然語言理解中的中心問題,即要把帶有潛在歧義的自然語言輸入轉換成某種無歧義的計算機內部表示。
歧義現象的廣泛存在使得消除它們需要大量的知識和推理,這就給基於語言學的方法、基於知識的方法帶來了巨大的困難,因而以這些方法為主流的自然語言處理研究幾十年來一方面在理論和方法方面取得了很多成就,但在能處理大規模真實文本的系統研製方面,成績並不顯著。研製的一些系統大多數是小規模的、研究性的演示系統。
目前存在的問題有兩個方面:一方面,迄今為止的語法都限於分析一個孤立的句子,上下文關系和談話環境對本句的約束和影響還缺乏系統的研究,因此分析歧義、詞語省略、代詞所指、同一句話在不同場合或由不同的人說出來所具有的不同含義等問題,尚無明確規律可循,需要加強語用學的研究才能逐步解決。另一方面,人理解一個句子不是單憑語法,還運用了大量的有關知識,包括生活知識和專門知識,這些知識無法全部貯存在計算機里。因此一個書面理解系統只能建立在有限的詞彙、句型和特定的主題范圍內;計算機的貯存量和運轉速度大大提高之後,才有可能適當擴大范圍.
以上存在的問題成為自然語言理解在機器翻譯應用中的主要難題,這也就是當今機器翻譯系統的譯文質量離理想目標仍相差甚遠的原因之一;而譯文質量是機譯系統成敗的關鍵。中國數學家、語言學家周海中教授曾在經典論文《機器翻譯五十年》中指出:要提高機譯的質量,首先要解決的是語言本身問題而不是程序設計問題;單靠若干程序來做機譯系統,肯定是無法提高機譯質量的;另外在人類尚未明了大腦是如何進行語言的模糊識別和邏輯判斷的情況下,機譯要想達到「信、達、雅」的程度是不可能的。
6. 前端開發時meta標簽一般怎麼寫
注釋:<meta> 標簽永遠位於 head 元素內部。
注釋:元數據總是以名稱/值的形式被成對傳遞的。
name屬性
name屬性主要用於描述網頁,與之對應的屬性值為content,content中的內容主要是便於搜索引擎機器人查找信息和分類信息用的。
meta標簽的name屬性語法格式是:<meta name="參數" content="具體的參數值">;。
其中name屬性主要有以下幾種參數:
A、Keywords(關鍵字)
說明:keywords用來告訴搜索引擎你網頁的關鍵字是什麼。
舉例:<meta name ="keywords" content="science,ecation,culture,politics,ecnomics,relationships,entertainment,human">
B、description(網站內容描述)
說明:description用來告訴搜索引擎你的網站主要內容。
網站內容描述(description)的設計要點:
①網頁描述為自然語言而不是羅列關鍵詞(與keywords設計正好相反);
②盡可能准確地描述網頁的核心內容,通常為網頁內容的摘要信息,也就是希望搜索引擎在檢索結果中展示的摘要信息;
③網頁描述中含有有效關鍵詞;
④網頁描述內容與網頁標題內容有高度相關性;
⑤網頁描述內容與網頁主體內容有高度相關性;
⑥網頁描述的文字不必太多,一般不超過搜索引擎檢索結果摘要信息的最多字數(通常在100中文字之內,不同搜索引擎略有差異)。
舉例:<meta name="description" content="This page is about the meaning of science,ecation,culture.">
C、robots(機器人向導)
說明:robots用來告訴搜索機器人哪些頁面需要索引,哪些頁面不需要索引。
content的參數有all,none,index,noindex,follow,nofollow。默認是all。
舉例:<meta name="robots" content="none">
D、author(作者)
說明:標注網頁的作者
http-equiv屬性
http-equiv顧名思義,相當於http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個參數的變數值。
meta標簽的http-equiv屬性語法格式是:<meta http-equiv="參數" content="參數變數值"> ;其中http-equiv屬性主要有以下幾種參數:
A、Expires(期限)
說明:可以用於設定網頁的到期時間。一旦網頁過期,必須到伺服器上重新傳輸。
用法:<meta http-equiv="expires" content="Fri,12 Jan 2001 18:18:18 GMT">
注意:必須使用GMT的時間格式。
B、Pragma(cache模式)
說明:禁止瀏覽器從本地計算機的緩存中訪問頁面內容。
用法:<meta http-equiv="Pragma" content="no-cache">
注意:這樣設定,訪問者將無法離線瀏覽。
C、Refresh(刷新)
說明:自動刷新並轉到新頁面。
用法:<meta http-equiv="Refresh" content="2;URL">;(注意後面的分號,分別在秒數的前面和網址的後面,URL可為空)
注意:其中的2是指停留2秒鍾後自動刷新到URL網址。
D、Set-Cookie(cookie設定)
說明:如果網頁過期,那麼存檔的cookie將被刪除。
用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday,12-Jan-2001 18:18:18 GMT; path=/">
注意:必須使用GMT的時間格式。
E、Window-target(顯示窗口的設定)
說明:強制頁面在當前窗口以獨立頁面顯示。
用法:<meta http-equiv="Window-target" content="_top">
注意:用來防止別人在框架里調用自己的頁面。
F、content-Type(顯示字元集的設定)
說明:設定頁面使用的字元集。
用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">
G、content-Language(顯示語言的設定)
用法:<meta http-equiv="Content-Language" content="zh-cn" />
功能
上面我們介紹了meta標簽的一些基本組成,接著我們再來一起看看meta標簽的常見功能:
7. NLP自然語言處理
羅素悖論:由所有不包含自身的集合構成的集合
例子:理發師稱只給那些不給自己理發的人理發。
基於集合論,理發師無論給自己理發還是不給自己理發都是矛盾的。
因此集合論不是完備的。 即使後面馮羅伊德等科學家提出了各種假定條件。
由於上述的原因,集合率無法很好的描述自然語言,科學家發現通過概率模型可以更好的描述自然語言。
深度學習來處理自然語言屬於概率模型
證明最小點位於坐標軸上
h = f+c|x|
由於在x = 0處不可導
h-left'(0)*h-right'(0) = (f'+c)*(f'-c)
那麼如果c>|f'(0)|可得,h在0處左右導數異號
0是最值。
那麼在損失函數加入L1正則化後,可以得到某些維度容易為0,從而得到稀疏解
幾乎所有的最優化手段,都將適用凸優化演算法來解決
P(A|B) = P(A and B) / P(B)
if A and B 獨立
=》P(A and B| C) = P(A|C)*P(B|C)
也可以推出
=>A(A|B and C) = P(A|C) (B交C不為空)
拋9次硬幣,硬幣出現正面的概率是0.5,出現k次的概率分布如下如
服從正態分布
x的平均值
E = x*p(x) + ...
x相對於期望的偏離
var = (x-E(x))^2
conv = (x - E(x))*(m - E(m))
描述x,m是否有同分布
按理協方差為0,並不代表x和m沒有關系
例如下圖
如果點的分布對稱的分布,會得到協方差為0,但是其實他們是有關系的。
把每個相關的概率累加,得到聯合概率
P(x1=m1,x2=m2...) = n!*P1 m1/m1!*P2 m2/m2!
T(n) = (n-1)!
T(x)用一條曲線逼近n!,進而可以求得非整數的階乘
由二項式分布推出
P = T(a+b)*x (a-1)*(1-x) (b-1)/(T(a)*T(b))
則正態分布
y為0時,不考慮y『。y為1時,y'越接近1,越小,越靠近0,越大
把D最小化,迫使y'逼近y
對於一個句子,有若干單片語成。例如
C1: The dog laughs.
C2: He laughs.
那麼計算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。
根據歷史文本的統計學習。
可以得到P(C1)<<P(C2)
P('I love the game') = P('I')*P('love')*P('the')*P('game')
其中P(<work>) = 頻率/總單詞數
計算一篇文章是積極的還是消極的。
P(y|x) = sigmod(wx)
x是文章內每個單詞的頻率
y表示積極和消極情感
其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)
2-gram模型例子
把多個gram的模型進行線性整合
P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)
y代表是否是垃圾郵件
x代表單詞
廣州市長壽路 -》 廣州市長|壽路
廣州市長壽路 -》 廣州市|長壽路
匹配詞袋:廣州市,廣州市長,長壽路
使用最大匹配發,第二個分詞更優
通過統計P(A|B),得出各個option的概率,取最大的概率,則為最後的分詞
word => [0, 0 , ... 1, ... 0]
word => [0, 1, 0, 1, 0, ...]
可以解決詞相似性問題
計算附近詞的頻率
word => [0, 3, 0, 1, 0, ...]
w是附近詞的one-hot encoding
score是詞的one-hot encoding
最後一層通過softmax,取擬合文本
最終中間層則為詞向量
輸入為詞one-hot encoding
輸出為附近此的one-hot encoding
最後通過softmax預測附近詞
最後中間層則為結果詞向量
混合模型是一種統計模型,問題中包含若干個子問題,每個子問題是一個概率分布,那麼總問題就是若干個子問題的組合,也就是若干個子分部的組合,這樣就形成了混合模型。
有紅黑兩種硬幣,把它們放在盒子里,從盒子里隨機抽取一個硬幣並投幣,抽到紅色的概率是p,紅色硬幣正面的概率是q,黑色硬幣正面的概率是m,假設我們沒辦法看到抽取出的硬幣的顏色,只能看到最終是正面或者反面的結果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估計p,q,m三個參數。
此時可以計算出
通過EM演算法迭代如下:
隨機p q m
迭代以下過程:
計算上面table
p = (aC(正)+cC(反))/total
q = aC(正)/(aC正+cC正)
m = bC(正)/(bC正 + dC正)
假設有上述數據,需要用混合模型來逼近,通過分析,紅色和藍色數據分別為高斯正態分布,N(u, v)
此時可以得到如下表
p = pN紅x/(pN紅x+(1-p)N藍x)
u = pN紅x/n
v = pN紅(x-u)^2/n
詞性轉換概率
詞性到單詞的轉換概率
通過EM遞歸演算法,訓練以上參數,得到隱馬爾可夫模型
PLSA主題模型
只統計詞的頻率,不計算詞的相對位置
計算文檔和單詞頻率的矩陣
進行奇異矩陣分解
得到A矩陣的壓縮U,U中的k則為k個主題
通過分析,LSA得到的主題是跟現實無法關聯,它只是一個量,而沒有明顯的意義。
PLSA為了解決此問題,引入概率模型,先確定主題個數
然後通過構建Doc->topic的概率table,和topic->word的概率table。
然後通過EM模型,得到這兩個table的所有概率值。
進而得到文檔的主題表示
PLSA的缺陷是,對於預測未知的doc,無法計算此文檔的相關概率。隨著doc數量的增加,PLSA模型的參數會線性增加,從而會造成過擬合。
LDA通過引入先驗概率來克服PLSA的問題。
類似於編譯原理的上下文無法句法分析,一顆語法樹
通過對CFG引入概率參數
有了概率,可以計算每顆語法樹的極大似然概率,並取最大概率的樹為最終輸出
上一個狀態中間層的輸出作為下一隱層的輸入
類似於HMM的2-gram模型。t狀態受到t-1時刻輸出的影響,受t-k的輸出的k越大,影響越小
由於RNN幾乎只受到上一時刻的影響,而忽略了久遠信息的影響。從而造成了一定的局限性。
LSTM通過引入長短記憶方法,來維持長記憶的信息。
通過訓練核內的sigmod函數,使得LSTM可以根據不同的句子,有條件的保留和過濾歷史信息,從而達到長記憶的功能。
GRU是LSTM的簡化版,它只需要處理兩個sigmod函數的訓練,而LSTM需要三個sigmod函數的訓練,減少了訓練的參數,加快了訓練的速度,但也損失了一部分模型的復雜,在處理較復雜問題時,沒有LSTM那麼好。
auto-encoder-decoder的特點是輸出的單元數是固定的。對於一般自然語言處理,例如機器翻譯,輸入的單元個數跟輸出單元的個數並不是一一對應的,此時就需要動態的生成輸出單元。Seq2Seq通過動態的輸出結束符,代表是否輸出完成,達到可以動態的根據輸入輸出不同的單元個數。
seq2seq的缺點是,所有的輸入序列都轉化為單一的單元c,導致很多信息都將消失,對於不同的輸出yi,它可能依賴的輸入xj有可能不一樣,此時通過加入注意力模型,通過對xi進行softmax處理,並加入到y權重的訓練中,可以讓不同的y,有不同的x對它進行影響
softmax的輸入為輸入單元x,和上一個輸出單元y,聯合產生softmax的權重,進而對不同的序列,對於同一個x,會有不同的注意力到輸出
q = Wq(x)
k = Wk(x)
v = Wv(x)
x為詞向量
通過訓練,得到權重w,從而學習到這一層的softmax注意力參數
R是前一次encoder的輸出
通過增加w的數量,產生多個z,並進行堆疊,通過前饋網路,最後產生z
在使用self attention處理句子時,是沒有考慮單詞在句子中的位置信息的。為了讓模型可以加入考慮單詞的位置信息,加入了位置編碼的向量
計算如下:
pos為單詞在句子中的位置
i為詞向量的位置
d為句子的長度
位置編碼加上詞向量形成tranformer的輸入
加入了歸一化和殘差網路
最終通過softmax,輸出每個單詞的概率,並最終輸出單詞
8. web前端需要掌握的哪些知識
一個合格的web前端需要掌握哪些技術?
最基礎的自然是JavaScript,HTML和css這三種語言。
首先了解下它們到底是什麼。
HTML是用戶看到的網頁的骨架,比如你會發現當前頁面分為左中右三個部分,其中還填充了不同的文字和圖片;每個子部分還會繼續細分,比如當前頁面的中間部分下方有輸入框等等。
CSS是網頁展示的細節控制,比如你會發現有的文字是紅底白色,有的子部分佔了頁面的二分之一寬,有的只佔六分之一,有些部分需要用戶進行某些操作(如點擊,滑動)才會出現等等,這些就是有CSS來控制。
JavaScript是負責捕捉用戶在瀏覽器上的操作,並與後端伺服器進行數據交換的腳本語言。當用戶在前端進行點擊,輸入等操作的時候,會觸動綁定了該動作的JavaScript腳本,然後JavaScript收集數據,調用後端的api介面,再將後端返回的數據交給HTML和CSS渲染出來。
一個網頁的HTML代碼和CSS代碼是可以直接在瀏覽器中查看的,你可以直接按F12,就能看到下圖右側的模塊,左右側紅框就是代碼與實際頁面的對應關系。因此如果你看到某個網站的布局很不錯,不妨點擊F12,進行學習。
前端框架
然而,實際應用中,已經很少有正規的項目組直接用上述三種語言進行web 前端開發了,而是使用很多封裝了這三種語言的框架,比如
Vue.js
,angular,react native等等。它們是來自谷歌和Facebook的大神項目組,基於自己的經驗,封裝了原生前端語言,實現了更多更復雜更酷炫的功能。因此,可以說,學會使用這些框架,能達到事半功倍的效果。
比如用了vue,它是自底向上增量開發的設計,其核心只關心圖層,而且還可以與其他庫或已存項目融合,學習門檻極其友好;另一方面,vue可以驅動單文件組件和vue生態系統支持的庫開發的復雜單頁應用。有了這個生態系統,可以說,vue是處在一個不斷壯大,不斷完善的欣欣向榮的狀態。
網路通信協議
由於前後端分離的趨勢,前端還需要了解很多網路通信協議的知識,這里不局限於http協議,因為據我的經驗,有時候我們還會用到websocket等協議。因此,前端需要簡單了解不同協議的特點以及使用方式,但是好消息是不用像學習計算機網路課程一樣對每種協議的原理都了解的特別透徹,只要學會如何用前端語言發送這種協議的請求就夠了。