BTemplates.com

  • This is default featured slide 1 title

    Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

  • This is default featured slide 2 title

    Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

  • This is default featured slide 3 title

    Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

  • This is default featured slide 4 title

    Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

  • This is default featured slide 5 title

    Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

1001 thủ thuật sử dụng Notepad ++

 I. Xóa dòng + điều kiện

1. Xóa các dòng có chứa kí tự (delete line if contains)

Ví dụ cần xóa tất cả các dòng có chứa từ “help

Bước 1. Menu Search -> Mark ... hoặc Ctr + F chọn Tab là Mark
Bước 2. Nhập từ khóa vào ô Find what là: help
Bước 3. Check vào Bookmark line và Wrap aroud -> click vào Mark All (nó sẽ đánh dấu tất cả các dòng có chứa từ help)
Bước 4: Menu -> Bookmark -> Remove Bookmarked Lines (xóa tất cả các dòng đã book mark)

2. Xóa các dòng không chứa kí tự (delete line if not contains)

Các bước 1,2,3 giống như trên.
Bước 4: Menu -> Bookmark -> Remove Unmarked Lines (xóa tất cả các dòng không book mark)

3. Xóa các dòng trắng (delete blank lines)

Menu Edit -> Line Operations -> Remove Empty Lines (Containing Black Character)

4. Xóa dòng ít hơn n kí tự (Removing lines with less than n characters)

Ví dụ xóa dòng có ít hơn 10 kí tự

^.{0,10}(\r\n?|\n|$)

5. Xóa dòng nhiều hơn n kí tự (Removing lines with than more n characters)

Ví dụ xóa dòng có nhiều hơn 10 kí tự

.{10}.+(\r?\n|\n|$)

6. Xóa các dòng trùng nhau (Remove duplicate lines)

Xem tại đây: https://tangduongtrieu.com/loai-bo-du-lieu-trung-nhau-bang-notepad/

II. Thêm kí tự vào dòng

1. Thêm kí tự vào đầu dòng (Insert characters to begin line)

Ví dụ thêm vào từ help vào đầu, ở tất cả các dòng.

Find What: ^ -> Replace with: help

2. Thêm kí tự vào cuối dòng (Insert characters to end line)

Ví dụ thêm vào từ help vào cuối, ở tất cả các dòng.

Find What: $ -> Replace with: help

3. Thêm kí tự vào giữa 2 kí tự trong dòng

Ví dụ thêm khoảng trăng vào giữa tất cả kí tự trong dòng abcd -> a b c d

Find What: (.) -> Replace with: $1 

Chú ý: có khoảng trắng ở sau kí tự $1

III. Xóa kí tự trong dòng

1.Xóa dấu kí tự cuối cùng trong dòng.

ví dụ xóa kí tự / ở cuối dòng

Find What: /$ -> Replace with: để trống

2.Xóa ký tự ở đầu dòng.

Ví dụ xóa https:// ở đầu dòng

Find What: ^https:// -> Replace with: để trống

3. Xóa tất cả ký tự ở sau 1 một ký tự nào đó

Ví dụ xóa tất cả ký tự ở sau từ help trong dòng

 Find What: help.* -> Replace để trống

4. Xóa tất các ký tự ở trước 1 ký tự nào đó trong dòng

Ví dụ xóa tất cả ký tự ở trước từ help trong dòng

 Find What: ^.+help -> Replace để trống

5. Xóa tất cả số (numbers) trong dòng

 Find What: [0-9]+ -> Replace để trống

6. Xóa dấu chấm đầu tiên trong dòng

 Find What: ^.?(.*) -> Replace: \1

7. Xóa kí tự ở đầu và ở cuối dòng.

Ví dụ: 20000sat 284sat 1440mins -> 284sat như vậy là xóa 20000sat ở đầu dòng và xóa 1440mins ở cuối dòng chỉ lấy 284sat ở giữa.

Find What: ^.{9}(.*).{9}$ -> Replace: $1

Giải thích: ^.{9}(.*).{9}$ regex xóa 9 kí tự ở đầu và 9 kí tự ở cuối, giữ lại đoạn giữa.

IV. Tìm ký tự trong dòng

1.Tìm dòng có 3 số liên tiếp sau

Find what: /d/d/d

2. Tìm dòng là số

^\d+

3. Tìm dòng có 2 số liên tiếp nhau và phía sau là dấu 2 chấm “:”

^\d\d:$

V. Câu hỏi trong bài

1.Câu hỏi của bạn Anh

Text Gốc

Tên: A
Họ : B
Năm Sinh : 1990
Địa Chỉ : Quảng Phú
Thành Phố : Quảng Trạch
Tỉnh : Quảng Bình
SĐT : 01234567899
Tên: A
Họ : B
Năm Sinh : 1990
Địa Chỉ : Quảng Phú
Thành Phố : Quảng Trạch
Tỉnh : Quảng Bình
SĐT : 01234567899
Tên: A
Họ : B
Năm Sinh : 1990
Địa Chỉ : Quảng Phú
Thành Phố : Quảng Trạch
Tỉnh : Quảng Bình
SĐT : 01234567899
Tên: A
Họ : B
Năm Sinh : 1990
Địa Chỉ : Quảng Phú
Thành Phố : Quảng Trạch
Tỉnh : Quảng Bình
SĐT : 01234567899

Thành

A | B | 1990 | Quảng Phú | Quảng Trạch | Quảng Bình | 01234567899
A | B | 1990 | Quảng Phú | Quảng Trạch | Quảng Bình | 01234567899
A | B | 1990 | Quảng Phú | Quảng Trạch | Quảng Bình | 01234567899
A | B | 1990 | Quảng Phú | Quảng Trạch | Quảng Bình | 01234567899

Bước 1:

Find what:

Tên: 

Thành

\n

Mục đích xóa cái Tên : thành xuống dòng

Bước 2:

Find what:

^(.*): 

thành (chú ý có 2 khoảng trắng phía trước và phía sau của dấu |)

 | 

Giải thích: Tìm string trước dấu 2 chấm “:” và đổi thành dấu “|

Bước 3:

Find what:

\r\n

Thành (Empty)

 

Giải thích: Xóa cái xuống dòng.

Xem kết quả:

còn nữa …

https://tangduongtrieu.com/1001-thu-thuat-su-dung-notepad/

Share:

ĐÔI BA ĐỒNG BẠC NGHĨA LÝ GÌ!

Hẻm nhỏ, lại là hẻm cụt, có 53 nóc nhà. Tuy 53 nóc nhà nhưng mà tới gần trăm hộ dân, do có mấy căn nhà cũ, hai ba gia đình cùng sống chung.

Trong hẻm cũng đủ loại người, có mấy người già ưa ngồi uống café sữa trong cái ly nhỏ xíu, đựng trong chén nước sôi giữ ấm, rồi gác chéo chưn nói chuyện đời xưa. Có mấy đứa thanh niên mua hàng vô tội vạ, shipper xanh đỏ ra vô hẻm liên tục. Có người làm hãng sở, sáng mơi  sơ mi cà vạt ra xe hơi đi làm như trong phim Hồng Kông. Hẻm có chó, có mèo, có gà ta, có gà tre, thậm chí có nhà còn nuôi cả gà đá.


Hẻm nhỏ nên mọi người đều biết nhau, có thể không biết rành hết mọi người, nhưng ai trong hẻm cũng phải biết bà Tư. Bà Tư nhà khá giả, có đội xe tải, lính của bả toàn lái xe và lơ xe tải, xăm trổ kín người, tuần nào cũng tụ về cái bãi xe cuối hẻm nhậu.

Nhà Bà Tư đầu hẻm, nguyên một vách tường ngang cửa nhà bà Tư thay vì xây hàng rào làm sân thì bà Tư để trống, chỉ láng xi măng. Sáng cho vợ chồng chị Liên với đứa nhỏ bán cơm tấm và hủ tiếu, buổi chiều thì nguyên nhà cô Giàu bán cháo vịt với gỏi cuốn. Ai ra vô nhà bà Tư đều sực nức mùi đồ ăn, mấy người đó buôn bán được, cũng muốn gửi chút tiền gọi là “thuê mặt bằng” cho bà Tư, bà Tư khoát tay, nhớ sạch sẽ giùm tao là được rồi, đôi ba đồng bạc, nghĩa lý gì

Đó là câu cửa miệng của bà Tư, đôi ba đồng bạc, nghĩa lý gì, cứ cái gì liên quan tới tiền là nghe giọng bà Tư, đôi ba đồng bạc, nghĩa lý gì, bả nói riết rồi cả xóm nói liệu theo bả. Bữa có ông kia đi nhậu về, hứng chí lên cho thằng tài xế tắc xi 500 ngàn, thằng tài xế không dám lấy, đem vô gõ cửa trả lại. Ổng đứng trong nhà cũng la câu y chang, đôi ba đồng bạc mà, nghĩa lý gì, lấy đi chú em. Bà Tư nghe xong bật cười, đù má bắt chước tao.

Bà Tư xuất thân đâu ngoài Quảng, bà theo chồng lưu lạc vô Sài Gòn từ trước 75. Sau 75, chồng bà Tư chết, để lại bà với 5 đứa con nhỏ. Bà tư trở thành trùm vượt biên, bà Tư từng vượt biên tổng cộng 17 lần, trong đó bị bắt nhốt chỉ có 2 lần, còn lại do anh em biên phòng thấy tội, thấy quen, thấy người phụ nữ ôm 5 đứa con nên họ thả về. Một tay bà Tư nuôi 5 đứa con, làm đủ mọi thứ để mưu sinh, mà ngon lành nhứt tới giờ là tổ chức một đội xe vận chuyển cho mấy chợ đầu mối.

Năm người con của bà Tư chỉ có đúng một người đi học đàng hoàng, đó là cô con gái duy nhứt của bà Tư, người được cưng chiều nhứt nhà. Cô học giỏi, lãnh học bổng, rồi ra nước ngoài học và lấy chồng định cư luôn ở bển. Bà Tư làm được nhiêu tiền mua thêm đất, cất nhà gần bên, nên bốn ông con trai còn lại cũng ở loanh quanh trong hẻm.

Họ vẫn tụ tập qua nhà bà Tư nhậu, buổi chiều, cuộc nhậu như mọi cuộc nhậu ở Sài Gòn, vài lon bia và dĩa thịt vịt mua của nhà cô Giàu, ngay cửa, bữa nào vui thì mở ka rao kê ca, cũng mấy bản nhạc bolero nhừa nhựa. Cả bốn người họ đều xuất thân tài xế hoặc bốc vác, đều đen đúa vạm vỡ, giọng nói vẫn mang âm vị xứ Quảng rổn rảng, và cũng ưa khoát tay: đôi ba đồng bạc...

Những ngày tháng Bảy, Sài Gòn bắt đầu phong toả, hẻm cũng gần ủy ban phường nên dân phòng tới chốt luôn. Dịch bệnh lan ra quá nhanh, nỗi sợ dịch bệnh và sự thiếu thốn của những ngày thành phố bị phong tỏa đều thê thảm như nhau.

Nhà chị Liên dính đầu tiên. Chị Liên vẫn hay mua hàng trên mạng, và không biết lần mua hàng nào đó chị đã bị lây. Bà già má chồng chị Liên trở nặng ngay lập tức. Hai chiếc xe cấp cứu với những nhân viên y tế xanh lè kín mít tới đưa cả nhà họ đi, con bé 12 tuổi hằng ngày bưng hủ tiếu cũng bị hốt theo, dù nó âm tính. Rồi nhà cô Giàu cũng dính, lây thêm một nhà nữa. Rồi xịt khuẩn mù mịt, rồi hàng rào, rồi giăng dây trắng đỏ… như mọi con hẻm khác, ở Sài Gòn.

Hai tuần sau con bé con chị Liên trở về hẻm bằng xe của công an. Nó bận bộ đồ xanh kín mít, ôm theo hũ cốt của bà nội nó. Nó nói ba nó nằm chỗ khác, mẹ nó nằm chỗ khác, giờ cũng không liên lạc được. Nó vẫn âm tính nên người ta trả về nhà theo dõi, nhường chỗ cho người khác, ở trỏng đông lắm rồi.

Bà Tư nói mày về ở với ai? Nhà còn ai đâu mà ở. Cũng không ai dám chứa con bé, âm tính vậy chớ biết đâu nó dương trở lại, ai cũng xầm xì. Bà Tư nói thôi vô nhà tao ở. Kệ mẹ, không lẽ bỏ con nhỏ đứng ngoài hẻm hoài. Con bé đưa hũ cốt bà nội về nhà, rồi quảy ba lô qua nhà bà Tư ở. Nó khóc hoài. Bà Tư nạt nó vang cả con hẻm, bà nội mày già thì chết thôi, không bịnh này cũng bịnh khác mà. Ba má má nằm viện ít bữa rồi về, ở đây tao nuôi, có gì đâu mà khóc, cười lên cái cho sáng cái nhà coi.

Đội xe bà Tư có hai chiếc được cấp mã QR để chở hàng rau củ quả từ Tây Nguyên về Sài Gòn, chủ hàng bao ăn ở xét nghiệm cho tài xế mà không ai chịu lái, đám tài xế né hết. Bà Tư biểu hai ông con trai, thôi tụi mày lái đi, chở rau củ về cho người ta ăn nữa, chớ ăn cơm với cá khô hoài ỉ*a không ra, tội người ta. Rồi bà Tư đưa tiền biểu hai ông con trai mua thêm rau củ quả, chở về hẻm.

Mới đầu bà Tư để cái bàn, là mấy cái bàn cơm tấm của chị Liên, kê trước cửa nhà, chất rau củ trái cây lên đó, kêu mọi người trong hẻm ra lấy về ăn. Mà mấy nhà có người dính, hoặc mấy nhà không muốn ra đường thì không tới lấy. Bà Tư phiền quá mới đi dọc hẻm nói, thôi bà con mỗi nhà để giùm tui một cái rổ trước cửa. Tui biểu thằng Út đem rau củ quả bỏ vô rổ, đem vô ăn.

Vậy là ông Út nhà bà Tư thêm nhiệm vụ, mỗi khi xe rau củ trái cây về, vác xuống nhà, chia làm nhiều bịch nhỏ, rồi đi dọc hẻm, bỏ vô cái rổ trước nhà mỗi người. Để ngoài nắng chút cho chết mẹ con vi rút đi, lời bà Tư hay nói, rồi ai nấy đem vô nhà nấu ăn. Ở đâu thiếu rau củ chớ hẻm này không thiếu, mỗi nhà còn được cam, chanh, sả, trái cây… đủ thứ.

Ba tuần sau thì chồng chị Liên về. Anh tiều tụy như một cái xác khô, nhưng không phải do bệnh, mà buồn, mẹ mất, vợ còn nằm đâu chưa biết. Anh đón con bé từ nhà bà Tư, cúi đầu cám ơn bà Tư rồi dẫn con bé về nhà. Bà Tư xúc cho một bao gạo, một túi đồ ăn, một bao rau củ, hai cha con lục đục vác về nhà.

Hai cha con loay hoay ở nhà được ít bữa thì xe quân đội tới, chị Liên về, trong một cái hũ. Anh chồng ráo hoảnh, mắt xa xăm vô hồn, im lặng. Còn con bé nó cứ khóc miết. Bà Tư lại chạy qua, nói thôi để đó, hết dịch làm cái đám sau, giờ hai cha con mày ráng sống đi, cho mẹ mày ở trển yên lòng.

Rồi không biết lây ai, tới lượt anh Út nhà bà Tư dính luôn, mà lúc này cả thành phố đang cao điểm dịch, các bệnh viện đều quá tải, anh Út không đi viện nữa, phải tự nhốt mình trong nhà và uống thuốc theo đơn bác sĩ. Không có ai đi phát rau củ thì bà Tư tự đi.

Mỗi khi xe rau củ về, mấy ông con chất xuống cho mẹ, rồi bà Tư tự chia. Buổi chiều, bà Tư kêu anh chồng chị Liên phụ, đẩy cái xe đẩy hàng của mấy thằng tài xế bỏ trong bãi, chất đầy rau củ, trái cây, gạo… bà đi bỏ mỗi nhà một bịch. Xóm riềng cảm ơn bà Tư hoài cũng ngại, cả tháng ăn rau củ của bà Tư mà, có người mới về hẻm không biết, ráng cột tiền vô cái rổ, năn nỉ bà Tư cầm tiền giùm. Bà Tư thấy tiền bèn la lớn, nè, ra lấy tiền vô đi, cái này tao cho mà, đôi ba đồng bạc, nghĩa lý gì, chết có mang theo được đâu, đù má.

(Tác giả: Đàm Hà Phú)

Share:

Phân loại văn bản tiếng Việt sử dụng machine learning

Phân loại văn bản (Text classification) là một bài toán phổ biến trong xử lý ngôn ngữ tự nhiên (Nature language processing). Đối với phân loại văn bản tiếng Việt, sẽ có đôi chút khác biệt so với phân loại văn bản tiếng anh. Trong bài viết này, Lập Trình Không Khó (LTKK) sẽ hướng dẫn bạn chi tiết, từng bước quá trình xây dựng một số mô hình phân loại văn bản tiếng Việt. Bài viết sẽ đặc biệt tập trung vào quá trình tiền xử lý dữ liệu tiếng Việt làm sao để có được một mô hình phân loại đủ tốt.

Sau khi đọc xong bài viết này, bạn sẽ nắm được một số kiến thức như sau:

  1. Nắm được cấu trúc tổng quát của một mô hình phân loại văn bản (Text classification)
  2. Quy trình chi tiết cách xây dựng một hệ thống phân loại văn bản
  3. Các công việc cần làm khi tiền xử lý dữ liệu tiếng Việt
  4. Thử nghiệm và đánh giá trên một số mô hình phân loại khác nhau.

Bài toán phân loại văn bản

Phân loại văn bản (Text Classification) là bài toán thuộc nhóm học có giám sát (Supervised learning) trong học máy. Bài toán này yêu cầu dữ liệu cần có nhãn (label). Mô hình sẽ học từ dữ liệu có nhãn đó, sau đó được dùng để dự đoán nhãn cho các dữ liệu mới mà mô hình chưa gặp.

Lấy ví dụ, bạn cần xây dựng một mô hình học máy để dự đoán chủ đề (Kinh tế, Xã hội, Thể thao,…) của một bài báo bất kỳ. Khi đó, bạn cần rất nhiều dữ liệu có gán nhãn; tức là bạn cần rất nhiều bài báo mà mỗi bài báo đó chúng ta phải biết trước nó nằm trong chủ đề nào rồi. Vấn đề dữ liệu có lẽ là vấn đề nan giải nhất của mô hình học giám sát này ^^.

Hình ảnh dưới đây sẽ cho chúng ta cái nhìn tổng quát về cách hoạt động của một bài toán phân loại văn bản:



ô hình phân loại văn bản tiếng Việt tự động với Machine learning (credit: MonkeyLearn.com)
  • Giai đoạn (a): Huấn luyện (training) là giai đoạn học tập của mô hình phân loại văn bản. Ở bước này, mô hình sẽ học từ dữ liệu có nhãn (trong ảnh trên nhãn là Possitive, Negative, Neutral). Dữ liệu văn bản sẽ được số hóa thông qua bộ trích xuất đặc trưng (feature extractor) để mỗi mẫu dữ liệu trong tập huấn luyện trở thành 1 vector nhiều chiều (đặc trưng). Thuật toán máy học sẽ học và tối ưu các tham số để đạt được kết quả tốt trên tập dữ liệu này. Nhãn của dữ liệu được dùng để đánh giá việc mô hình học tốt không và dựa vào đó để tối ưu.
  • Giai đoạn (b): Dự đoán (prediction), là giai đoạn sử dụng mô hình học máy sau khi nó đã học xong. Ở giai đoạn này, dữ liệu cần dự đoán cũng vẫn thực hiện các bước trích xuất đặc trưng. Mô hình đã học sau đó nhận đầu vào là đặc trưng đó và đưa ra kết quả dự đoán.

Tiếp sau đây, chúng ta sẽ đi vào từng bước của quá trình xây dựng một mô hình phân loại văn bản tin tức tiếng Việt sau:

Bài toán: Xây dựng mô hình phân loại văn bản tin tức tiếng Việt cho trang báo điện tử X. Mỗi khi một bài báo được đăng, chương trình cần phải tự động xác định được bài báo đó nằm trong danh mục nào. Các danh mục gồm có: Kinh tế, Thể thao, Giáo dục, Sức khỏe, Du lịch, Pháp luật,…

Chuẩn bị dữ liệu

Dữ liệu là yếu tố quan trọng nhất và cũng là vấn đề mà chúng ta cần quan tâm nhất. Trong quá trình xây dựng một hệ thống phân loại văn bản, bước chuẩn bị và tiền xử lý dữ liệu quyết định tới thành bại của hệ thống hơn cả.

Với bài toán phân loại văn bản tin tức tiếng Việt, dữ liệu bạn cần chuẩn bị là dữ liệu các bài báo tiếng Việt kèm theo chủ đề của bài báo đó. Loại dữ liệu này nhìn chung là rất dễ kiếm, bởi vì có vô số website tin tức mỗi ngày đăng vài chục tin cơ mà.

Nếu bạn quan tâm tới việc thu thập dữ liệu tự động, có thể bạn nên đọc bài viết này:


Trong trường hợp bạn muốn có sẵn dữ liệu, bạn có thể tham khảo 1 trong 2 nguồn dữ liệu tin tức dưới đây:
  1. binhvq/news-corpus, lưu ý tải bản 76GB của tác giả (định dạng mongodb dump)
  2. duyvuleo/VNTC

Đây là các nguồn dữ liệu có kích thước tương đối lớn có thể dùng để thực hành bài toán phân loại văn bản. Các bạn sau khi tại về có thể xử lý và loại bỏ các thành phần không sử dụng trong dữ liệu. Chỉ giữ lại nội dung bài báo và chủ đề bài báo – 2 thành phần mà chúng ta quan tâm trong bài toán này.

Bước tiếp theo, chúng ta sẽ tiến hành tiền xử lý dữ liệu trước khi đưa vào huấn luyện mô hình phân loại văn bản. Việc tiền xử lý dữ liệu là hết sức quan trọng để đảm bảo mô hình đạt được kết quả tốt.

Tiền xử lý dữ liệu văn bản

Bước tiền xử lý dữ liệu là bước đầu tiên cần làm, nó cần được làm trước bước feature extractor. Việc tiền sử lý dữ liệu là quá trình chuẩn hóa dữ liệu và loại bỏ các thành phần không có ý nghĩa cho việc phân loại văn bản.

Tiền xử lý dữ liệu tiếng Việt cho bài toán phân loại văn bản thường gồm các việc sau:

  • Xóa HTML code (nếu có)
  • Chuẩn hóa bảng mã Unicode (đưa về Unicode tổ hợp dựng sẵn)
  • Chuẩn hóa kiểu gõ dấu tiếng Việt (dùng òa úy thay cho oà uý)
  • Thực hiện tách từ tiếng Việt (sử dụng thư viện tách từ như pyvi, underthesea, vncorenlp,…)
  • đưa về văn bản lower (viết thường)
  • Xóa các ký tự đặc biệt: “.”, “,”, “;”, “)”, …

Nếu bạn chưa từng xử lý dữ liệu văn bản với Python, bạn nên đọc trước 2 bài viết dưới đây trước khi tiếp tục:

Xóa HTML code trong dữ liệu

Dữ liệu được thu thập từ các website đôi khi vẫn còn sót lại các đoạn mã HTML. Các mã HTML code này là rác, chẳng những không có tác dụng cho việc phân loại mà còn làm kết quả phân loại văn bản bị kém đi.

Việc xóa các HTML code này cũng khá đơn giản, chúng ta có thể sử dụng regex trong Python để xóa đi một cách đơn giản:

Chuẩn hóa Unicode tiếng Việt

Hiện nay, có 2 loại mã Unicode được sử dụng phổ biến, Unicode tổ hợp và Unicode dựng sẵn. Điều đó dẫn tới vấn đề sau đây:

Hướng xử lý: Đưa về 1 chuẩn Unicode dựng sẵn (thằng này phổ biến hơn). Chi tiết cách xử lý thì mình đã trình bày ở bài Xử lý tiếng Việt trong NLP đã nhắc ở trên.

Nếu bạn không xử lý vấn đề này, khi đưa vào mô hình học máy tính sẽ hiểu đó là các từ khác nhau mặc dù ta đang nhìn thấy chúng chẳng khác nhau gì.

Chuấn hóa kiểu gõ dấu

Kiểu gõ dấu khác nhau thì bạn nhìn mắt thường cũng sẽ thấy được sự khác nhau: òa với  lần lượt là kiểu gõ cũ (phổ biến hơn) và kiểu gõ mới. Chi tiết về vấn đề này bạn có thể tham khảo tại Wikipedia.

Script dưới đây sẽ giúp chúng ta chuẩn hóa lại dữ liệu về kiểu gõ dấu cũ:

Tách từ tiếng Việt

Như các bạn đã học ở tiểu học hay trung học gì đó (quên rồi), đơn vị từ trong tiếng Việt bao gồm từ đơn (yêu) và từ ghép (học sinh). Nên chúng ta cần phải nói cho mô hình học máy biết đâu là từ đơn, đâu là từ ghép. Nếu không thì từ nào cũng sẽ là từ đơn hết.

Bởi vì mô hình của chúng ta sẽ coi các từ là đặc trưng, tách nhau theo dấu cách. Do đó, chúng ta phải nối các từ ghép lại thành một từ để không bị tách sai:

Học sinh học sinh học ⇒ Học_sinh học sinh_học

Bài toán này là một bài toán cơ sở trong NLP – bài toán tách từ (word tokenize). Thật may là hiện nay có khá nhiều thư viện mã nguồn mở của bài toán này. Do đó, chúng ta chỉ việc cài đặt và sử dụng.

Với ngôn ngữ Python, bạn có thể lựa chọn underthesea hoặc pyvi nhé.

Đưa về viết thường (lowercase)

Việc đưa dữ liệu về chữ viết thường là rất cần thiết. Bởi vì đặc trưng này không có tác dụng ở bài toán phân loại văn bản. Đưa về chữ viết thường giúp giảm số lượng đặc trưng (vì máy tính hiểu hoa thường là 2 từ khác nhau) và tăng độ chính xác hơn cho mô hình.

Xóa các ký tự không cần thiết

Như mình đã nói, tiền xử lý bao gồm việc loại bỏ các dữ liệu không có tác dụng cho việc phân loại văn bản. Việc này giúp:

  • Giảm số chiều đặc trưng, tăng tốc độ học và xử lý
  • Tránh làm ảnh hưởng xấu tới kết quả của mô hình

Các dấu ngắt câu, số đếm và các ký tự đặc biệt khác không giúp bạn phân loại một văn bản thuộc chuyên mục nào. Do đó, chúng ta nên loại bỏ nó đi.

Riêng với số đếm, ngày tháng, email (Các token đặc biệt). Nếu có thể bạn nên đưa nó về các token chung như: <number>, <date>, <email>, … Việc này có thể không giúp ích cho mô hình học tốt hơn nhưng sẽ giúp ích cho bạn trong việc giữ được mạch của dữ liệu.

Và đây là hàm tiền xử lý tổng hợp tất cả các bước ở trên, bạn tham khảo và bổ sung thêm nếu cần:

Mình thử ví dụ xem nó tiền xử lý dữ liệu mình ra sản phẩm gì nhé.

Dữ liệu gốc, copy đại 1 bài báo trên Vnexpress:

Và dữ liệu sau khi xử lý:

Mình quan sát thì thấy vừa ý rồi, nên mình sẽ chuyển sang bước tiếp theo.

Loại bỏ các stopword tiếng Việt

Cũng giống như việc loại bỏ các ký tự đặc biệt ở trên, nhưng bây giờ là các từ tiếng Việt hẳn hoi. Vậy tại sao cần loại bỏ?

  • Stopword là các từ xuất hiện nhiều ở tất cả các chuyên mục cần phân loại. Do đó, chúng là các đặc trưng không có tác dùng cho việc phân loại văn bản.
  • Các stopword thường là các từ nối (của, là, có, được, những,…) và các từ đặc trưng của dữ liệu (ví dụ như các từ “máy bay, tiếp viên” là các stopword nếu làm bài phân loại đánh giá khách hàng của doanh nghiệp vận tải hàng không.

Vậy làm sao để xây dựng bộ stopword?

Danh sách stopword phải nên được xây dựng từ bộ dữ liệu văn bản lớn, tầm cỡ vài chục GB là hợp lý. Nếu là dữ liệu trong miền bài toán bạn đang làm thì càng tốt!

Việc xây dựng bộ từ điển stopword tiếng Việt cũng rất đơn giản. Bạn chỉ cần thống kê các từ xuất hiện nhiều trong tất cả các chuyên mục và lấy top đầu là được.

Ví dụ, với dữ liệu tin tức của mình, thống kê trên khoảng 2000 bài báo mỗi chủ đề, thì mình được kết quả như sau (Đã sắp xếp giảm dần, lấy demo một ít top đầu):

Việc lấy bao nhiêu từ trong danh sách kết quả này cần dựa vào quan sát & loại trừ. Giả sử như mình trong bài này, mình chỉ lấy 100 từ đầu tiên để làm stopword.

Trong trường hợp bạn không muốn xây dựng bộ stopword hoặc không có dữ liệu để làm, bạn có thể tham khảo một số bộ stopword tiếng Việt đã được chia sẻ trên internet.

Loại stopword khỏi dữ liệu ra sao?

Việc cần làm bây giờ của bạn là duyệt qua từng bản ghi dữ liệu và xóa tất cả các từ trong dữ liệu mà có trong danh sách stopword.

Sau khi thực hiện tiền xử lý dữ liệu xong, giờ chúng ta bắt tay vào xây dựng các mô hình học máy cho bài toán phân loại văn bản trên dữ liệu đã tiền xử lý.

Xây dựng mô hình phân loại văn bản

Trước khi huấn luyện mô hình phân loại văn bản, ta cần xây dựng tập huấn luyện và tập kiểm thử. Việc này là cần thiết để đánh giá kết quả huấn luyện, lựa chọn mô hình cũng như tinh chỉnh để mô hình cho tốt hơn.

Xây dựng tập train/test

Dữ liệu dùng cho bài toán phân loại văn bản của mình sau khi tiền xử lý được lưu thành 1 file duy nhất. Mỗi dòng là một bài báo kèm theo thông tin danh mục của nó.

Mục đích mình để theo format này là để về sau train với thư viện Fasttext

Thống kê dữ liệu sử dụng:

Và đây là thống kê dữ liệu được mình sử dụng trên mỗi nhãn (mình dùng ít cho nhanh):

Các nhãn có số lượng khá cân bằng rồi, nên việc xử lý dữ liệu mất cân bằng không cần phải lo. Nếu bạn dùng thực tế, nên thêm dữ liệu nhiều hơn gấp 10 lần nhé ^^.

Mình sẽ sử dụng thư viện sklearn trong Python giúp mình tách dữ liệu làm 2 tập train/test riêng biệt:

Ở trên, mình thực hiện các công việc sau:

  1. Đọc dữ liệu từ file và tách làm 2 list text (dữ liệu) và label (nhãn). Dữ liệu text[i] sẽ có nhãn là label[i].
  2. Chia làm 2 tập train (X_train, y_train) và test (X_test, y_test) theo tỉ lệ 80% train, 20% test.
  3. Lưu train/test data ra file để sử dụng cho việc train với thư viện Fasttext.
  4. Đưa label về dạng vector để tiện cho tính toán sử dụng LabelEncoder.

Ok, bậy giờ chúng ta sẽ sử dụng tập train để đi thử nghiệm với các mô hình phân loại văn bản tiếng Việt khác nhau nhé. Mình sẽ thử nghiệm trên các mô hình mà các bạn có thể dễ dàng cài đặt:

  • Naive Bayes (thư viện sklearn)
  • Logistic Regression (thư viện sklearn)
  • Support Vector Machine (thư viện sklearn)
  • Fasttext (https://fasttext.cc/)

Với các thuật toán machine learning truyền thống sử dụng thư viện sklearn, mình sẽ xây dựng bộ trích xuất đặc trưng (feature extractor) sử dụng TF-IDF.

Phân loại văn bản với Naive Bayes

Phân loại văn bản với Logistic Regression

Phân loại văn bản với SVM

Phân loại văn bản dùng Fasttext

Đầu tiên, bạn cần cài đặt thư viện này như sau:

Tiếp theo, bạn cần chuẩn bị dữ liệu giống như 2 file “train.txt” và “test.txt” mà mình đã chuẩn bị ở phần Xây dựng tập train/test:

Đánh giá mô hình phân loại văn bản

Trong mỗi mô hình trên, mình đều tiến hành đo thời gian huấn luyện. Bạn có thể dựa vào thông tin đó để biết mô hình nào huấn luyện nhanh hay chậm, mất bao lâu để huấn luyện xong.

So sánh các mô hình

Còn bây giờ, chúng ta sẽ đánh giá các mô hình vừa rồi để xem mô hình nào cho kết quả tốt nhất trên tập test:

Và đây là kết quả sau khi chạy đoạn code đánh giá trên:

Mình cũng thử xem kết quả trên từng nhãn của mô hình naive bayes xem thế nào:

Thì được kết quả như sau:

Nhận xét & đánh giá

  • Mô hình Logistic Regression và SVM cho kết quả vượt trội hơn Naive Bayes. Điều này do khả năng học của 2 mô hình này tốt hơn một mô hình ngây thơ (naive).
  • Một số nhãn cho độ chính xác phân loại thấp (giải trí, nhịp sống, sống trẻ). Nguyên nhân có thể do các chuyên mục này không thực sự quá rõ ràng, nổi bật so với các chuyên mục khác nên mô hình dễ bị sai hơn. Ví dụ: Bài “Cô giáo dành cả thành xuân để dạy các em vùng cao” thì có thể là ở Nhịp sống hoặc Sống trẻ đều ổn. Về vấn đề này, chúng ta cần phải dành thời gian để quan sát dữ liệu, lọc ra các bài báo bị phân loại sai và tìm hiểu nguyên nhân.
  • Mô hình sử dụng thư viện Fasttext cho kết quả thấp nhất (không như kỳ vọng của mình). Nguyên nhân mình đoán là do hơi ít dữ liệu nên chưa học tốt việc biểu diễn từ. Nếu có thể, bạn hãy train lại với pretrain word2vec hoặc sử dụng nhiều dữ liệu hơn để nó có thể cho kết quả tốt hơn.
  • Tăng số lượng dữ liệu huấn luyện cho các mô hình sẽ giúp các mô hình trên đây học tốt hơn đó.

Tự thực hành phân loại văn bản

Source code phân loại văn bản tiếng việt trình bày trong bài viết này được lưu tại Github, bạn mở nó lên và click vào mục Demo để thực hành nhé!

Mọi ý kiến đóng góp, nhận xét cũng như các thắc mắc liên quan tới bài viết. Các bạn vui lòng để lại bình luận phía dưới bài viết. Xin cám ơn!


Tài liệu tham khảo

  1. Dữ liệu huấn luyện trong bài viết
  2. Thư viện fasttext của Facebook
  3. Thư viện học máy scikit-learn

  1. Nguồn: https://blog.luyencode.net/phan-loai-van-ban-tieng-viet/
Share:

Blogger templates

Popular Posts

Education[combine]

Label-Index

Sport[slider]

Được tạo bởi Blogger.

Comments

Recent

Bottom Ad [Post Page]

Tìm kiếm Blog này

Blog Archive

Side Ads

Connect Us

Footer Ads

AD BANNER

Random News

Text Widget

Fashion[oneright]

Technology[oneleft]

Business[three](3)

Sticky News[hot](3)

Health[two]

Science[dark](3)

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Recent

Travel the world

Full width home advertisement

Comments

randomposts

Author Description

Hey there, We are Blossom Themes! We are trying to provide you the new way to look and use the blogger templates. Our designers are working hard and pushing the boundaries of possibilities to widen the horizon of the regular templates and provide high quality blogger templates to all hardworking bloggers!

Blogroll

About

Pages - Menu

Pages - Menu

Post Page Advertisement [Top]

Climb the mountains

Recent Posts

Unordered List

  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • Aliquam tincidunt mauris eu risus.
  • Vestibulum auctor dapibus neque.

Pages

Theme Support

Need our help to upload or customize this blogger template? Contact me with details about the theme customization you need.