機器生成中文句子

自然語言處理有兩種基本的方法:基於規則和基於統計。
馬爾可夫統計模型在自然語言處理中被廣泛的應用。馬爾可夫鏈
由俄國數學家馬爾可夫提出,利用條件概率對語言建立數學模型,
最初馬爾可夫用它分析普希金的詩。

我寫了個玩具程序,它將一階馬爾可夫鏈和基於規則的一些方法
結合來實現機器生成中文句子。我把寫的13篇博客修改了一下,
主要是刪掉博文中包含的代碼部分,並進行了手工分詞。將這13
篇修改後的博文作爲程序的語料庫。

程序使用的主要數據結構是圖和hash表。我用圖表示詞和其後綴
的關係。爲方便查找,將圖的節點嵌入到hash表中,實際上這個
圖就是個級聯的hash表。

我定義了幾個符號作爲句子結束的標誌:
const char *const sentence_end = "。!?;:.;:?!";
而且在統計博文中的詞時,標記那些可以作爲句子開頭的詞。
程序在生成中文句子時只能把這些詞作爲句子的開始和結束。所
以程序並不是完全基於統計的。

下面是由程序生成的句子,每一行是一句:
////////////////////////////////////////////////////////////////////
我在我的機器上一般不是普通意義上的漂亮。
我學習數學主要依據如下理論:
程序員要在多種簡單中進行權衡,影響了其他程序的下載地址:
程序員就是好飛機。
下面的代碼,所以太大的會溢出。
下面的代碼是數組索引,不贅述了。
two-way算法主要依據CriticalFactorization理論,則在一個程序對算法的一種改進。
two-way是2.93G,她是指除了作一些運算以外沒有明顯差異,收入還是那麼糗。
空間複雜度都是程序設計過程中不同部分常用的gcc擴展。
空間複雜度都是O(n),右子樹的高度至多遞歸40次,編譯時加-DCOLL_PRINT選項打開此選項速度得到明顯的提升。
第三個是一維模式匹配的形式化定義相似,所以纔有:
第三個是黑節點;
這只是避免CPU佔用率。
這就是找到最合理的設計策略。
那麼(u,v)是對節點的旋轉次數。
代碼參考了:
代碼實現,只是對各文件的操作。
程序使用的主要依據如下:
程序對代碼實現。
第二個是監測目錄停止:
第二個是一種改進。
使用new和其後綴。
使用我的CPU佔用率的近似值。
在《編程珠璣》中看到效果。
在這一層意義上是黑色;
/////////////////////////////////////////////////////////////////////

該玩具程序有許多不足之處:
沒有正確處理文章中的符號和英文;
只能處理UTF-8編碼;
語料庫太小,程序趨於生成原句;
其他一些bug;

代碼有點多,不貼了。

發佈了43 篇原創文章 · 獲贊 12 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章