1. Noron.vn
  2. Trung Le
Avatar user Trung Le

Trung Le

Neural language model & ngram language model?

Em tham khảo một số bài báo có nói rằng neural language model sẽ rất có ích khi chỉ có ít dữ liệu in-domain vì nó giúp vector hóa các 'từ' vào không gian vector liên tục, các từ có nghĩa gần nhau sẽ 'gần' nhau hơn. Ví dụ như "anh" sẽ gần nghĩa với "chị". Do làm được việc này nên sẽ cần ít dữ liệu hơn nên em nghĩ mô hình này khá hay & nên tìm hiểu (em thử nghiệm với cùng 1 tập in-domain thì PPL của ngram là 44 trong khi của RNNLM chỉ là 29) . Tuy nhiên em có khá nhiều thắc mắc như sau ạ:

  • Với neural language modeling, RNNLM của Mikolov khi sơ khai vẫn dùng one hot vector nhưng sau đó lại học được cách biểu diễn từ một cách hợp lý để có được phân bố như em nói ở trên, vậy nó học như thế nào ạ.
  • Neural network cũng học luôn được cách mô hình hóa một câu/chuỗi từ... như thế nào ạ. Như n-gram thì nó sẽ dùng tần suất xuất hiện, và nếu em chỉ cần thêm k lần một đoạn text in-domain mà em muốn vào tập train thì nó sẽ nghiêng phần xác suất thêm về phía in-domain mà em muốn (đây là cách em làm khi thêm dữ liệu học từ các nguồn ngoài). Vậy nếu em dùng cách thay đổi tỉ lệ dữ liệu in-domain này với neural language model thì kết quả sẽ thay đổi như thế nào ạ.
  • Sau năm 2013 có một số kĩ thuật mới của Mikolov như skip-gram, fasttext của FB giúp học được cách vector hóa các từ, vậy nếu áp dụng cách này vào RNNLM thì kết quả liệu có tốt hơn là học trực tiếp từ text như bài báo RNNLM gốc của Mikolov không ạ?
  • Theo em biết thì mạng neural có thể học được nhiều thông tin hơn rất nhiều so với các mô hình khác. Vậy nếu em có tập học gồm có 1 phần text in-domain (giả sử đúng câu cú 100% do có người verify), phần còn lại (gọi là phần 2) là text thu thập được từ các bình luận trên diễn đàn, tạm cho là gần với text in-domain nhưng lại có những câu sai chính tả, cú pháp... tỉ lệ sai này khoảng 1/4 so với số câu đúng. Thì nếu em tăng số lượng phần 2 này có giúp tăng chất lượng của neural language model so với chỉ tập train gồm text in-domain không ạ.

Em chưa biết lập trình neural network nên có những băn khoăn có thể tự kiểm chứng nhưng lại chưa làm được. Em cảm ơn ạ.

Chào em,

Trong post của mình em đặt khá nhiều câu hỏi. Nếu mình trả lời hết thì sẽ khá dài, người đọc chắc cũng ngại, người viết cũng ngại gõ dài. :-) Lẽ ra em nên tách thành nhiều câu hỏi, mỗi câu hỏi chỉ tập trung vào một vấn đề thì mọi người dễ tương tác hơn.

Về câu hỏi đầu tiên của em, RNNLM học biểu diễn vector từ như thế nào. Để trả lời thấu đáo thì có lẽ mình cần dẫn các bài báo công bố liên quan để giải thích kĩ. Nhưng có lẽ đó không phải là mục đích của câu hỏi của em. Mình đoán em chỉ hỏi về ý nghĩa, nguyên lí, giải thích diễn nôm cho dễ hiểu thôi, không biết có đúng không?

Nếu đúng như thế thì mình diễn đạt vắn tắt nguyên lí của phương pháp học em đang hỏi như thế này.

Nói riêng, RNN LM hay các cách học phi hướng dẫn khác thì người ta sử dụng các đặc trưng thông tin ngữ cảnh của một từ để tìm hiểu về từ đó. Nguyên lí chính của phương pháp này là giả thiết phân phối (distributional hypothesis) được ông Zellig Harris đưa ra năm 1954. Giả thiết này nói rằng những từ nào xuất hiện trong các ngữ cảnh giống nhau thì sẽ có những quan hệ hay tính chất giống nhau.

Có vẻ giả thiết này rất hợp lí, phù hợp với quan sát tiên nghiệm của chúng ta. Trong các quan hệ xã hội cũng vậy, có câu nói đại khái là "Hãy cho tôi biết bạn bè anh là những người như thế nào, tôi sẽ cho biết anh là ai". Ý là chỉ cần biết về những người xung quanh một người A, những người mà A hay tương tác với, thì ta có thể suy đoán được A là người như thế nào một các tương đối.

Ví dụ, hai từ "đẹp" và "xinh" xuất hiện ở những câu sau, với những ngữ cảnh tương tự nhau thì chúng có thể giống nhau ở một số khía cạnh cú pháp, ngữ nghĩa nào đó:

  • Cô ấy rất xinh.
  • Hoa rất xinh.
  • Hoa khá đẹp.
  • Hoa khá xinh
  • Uyên khá đẹp
  • Cô ấy khá đẹp.

Phương pháp RNN LM khai thác thông tin ngữ cảnh của nhiều câu viết trong ngôn ngữ theo nguyên lí đó để tìm biểu diễn vector của các từ. Theo đó, mỗi từ sẽ được chiếu (hay nhúng) vào một không gian vector thực nhiều chiều (ví dụ 300 chiều). Hai từ gần giống nhau về nghĩa thì vector biểu diễn chúng gần nhau theo một độ đo khoảng cách nào đó.

Tạm thế nhé. Những ý hỏi khác của em ở trên mình sẽ trả lời dần sau. Cũng đã có một bạn hỏi một câu tương tự về việc huấn luyện với dữ liệu nhiễu (sai chính tả) với một số ý gần giống với ý em hỏi.

Language modeling với in-domain text hạn chế?

Thưa thầy em có một vài câu hỏi về language model cho bài nhận dạng tiếng nói (văn phong nói chuyện như đời thực) mong được thầy giúp đỡ ạ (Em có khá nhiều câu hỏi nên sẽ chia ra nhiều câu hỏi khác nhau ạ)

Hiện tại bọn em chỉ có khá ít dữ liệu in-domain. Em đã thử dùng cách làm giàu dữ liệu bằng Xen-C với text báo rồi build lại language model nhưng kết quả gần như không cải thiện, có lẽ do văn phong khác nhau quá nhiều. Em nghĩ là text từ các diễn đàn sẽ gần với thực tế hơn nhưng những text này khá lộn xộn, có bình luận hoàn toàn đúng chính tả, có bình luận vừa gõ có dấu vừa gõ không dấu, gõ nhầm, có câu hoàn toàn không dấu....

Em muốn hỏi thầy:

- Có cách nào để mình gom được dữ liệu phù hợp cho language model hơn không?

- Có cách nào để mình thu được các câu bình luận đúng chính tả nhất có thể không?

- Nếu chấp nhận các sai sót (vì không có đủ nguồn lực để có text chất lượng cao) trong text mà mình thu được thì đối với các phương pháp smoothing mình nên thay đổi tham số như thế nào (giả sử text đúng chính tả, ngữ pháp nhiều hơn nhiều các câu sai)

Em cảm ơn ạ.

Chào em,

Hai câu hỏi đầu tiên của em liên quan tới việc thu thập, làm sạch dữ liệu. Đây là vấn đề khó giải quyết hoàn toàn được và cũng tương đối mất thời gian.

Như em nói văn bản em thu thập được có tính chất lộn xộn, có cả hiện tượng mất dấu, sai chính tả hay gõ nhầm.

Cách tiếp cận đầu tiên có thể nghĩ tới là khôi phục dấu của những câu không dấu: ví dụ, chuyển từ "troi khong mua" thành "trời không mưa". Bài toán này có thể giải được với độ chính xác tương đối cao (cỡ 97%).

Với những câu sai chính tả thì hoặc chọn cách bỏ qua (lọc chỉ lấy các chuỗi có số lần xuất hiện lớn hơn ngưỡng nào đó chẳng hạn, với giả định rằng những từ sai chính tả thường có số lần xuất hiện ít); hoặc tìm cách khôi phục chính tả cho đúng. Cách khôi phục chính tả bản thân nó đã là một bài toán khó rồi.

Để thu được các câu đúng chính tả thì có lẽ cần phải thu thập từ những nguồn tin cậy hoặc cần hiệu chỉnh dữ liệu bằng sức người thôi. Mình cũng không biết có cách nào khác.

Câu hỏi thứ 3 của em chắc có ý là nên làm trơn mô hình ngôn ngữ như thế nào để các câu sai chính tả có ít ảnh hưởng tới các câu đúng? Mình chưa rõ ý hỏi này của em lắm vì chưa rõ mục tiêu là gì.

Mục tiêu của mô hình ngôn ngữ và các kĩ thuật làm trơn đi kèm là để ước lượng xác suất P(s) với s là một câu bất kì trong ngôn ngữ. Bối cảnh ở đây là s có thể là câu đúng hoặc câu sai, hoặc trộn lẫn cả hai. Về căn bản thì khi "troi mua" hay "trời mua" có trong tập huấn luyện thì nó cũng không khác gì chuỗi "trời mưa", chỉ có điều tần số xuất hiện ít hơn. Và các phương pháp làm trơn đã trực tiếp xem xét tần số của các lần xuất hiện rồi. Vì vậy, mình chưa rõ ý hỏi của em "nên thay đổi tham số như thế nào?" cụ thể là gì.