Bỏ qua

NLP Extensions

Tổng quan

Bộ công cụ NLP tiếng Việt:

  • NhanDienThucThe - Named Entity Recognition (NER)
  • HoiDapTiengViet - Question Answering
  • TomTatVanBan - Text Summarization
  • DichThuat - Translation
  • KiemTraChinhTa - Spell checking

NhanDienThucThe

Nhận diện thực thể có tên (NER) cho tiếng Việt.

Cơ bản

from vietnamese_ai import NhanDienThucThe

ner = NhanDienThucThe()
ket_qua = ner.nhan_dien("Nguyễn Văn A sống tại Hà Nội từ 01/01/2024, SĐT: 0912345678")

for entity in ket_qua:
    print(f"{entity['van_ban']} ({entity['loai']})")
# Nguyễn Văn A (PERSON)
# Hà Nội (DIA_DANH)
# 01/01/2024 (NGAY_THANG)
# 0912345678 (SO_DIEN_THOAI)

Loại thực thể hỗ trợ

Loại Mô tả Ví dụ
NGAY_THANG Ngày tháng 01/01/2024, ngày 1 tháng 1 năm 2024
SO_DIEN_THOAI Số điện thoại 0912345678, +84912345678
EMAIL Email user@example.com
URL URL https://example.com
TIEN_TE Tiền tệ 100.000 đồng, 5 triệu VND
DIA_CHI Địa chỉ 123 Nguyễn Huệ đường
DIA_DANH Địa danh Hà Nội, TP.HCM, Việt Nam
CHUC_DANH Chức danh Giám đốc, Giáo viên
PERSON Tên người (underthesea) Nguyễn Văn A

Lọc theo loại

ket_qua = ner.nhan_dien(van_ban, loai_loc=["NGAY_THANG", "TIEN_TE"])

Tùy chỉnh

ner = NhanDienThucThe(
    su_dung_underthesea=True,
    mau_tuy_chinh={"MA_SO_THUE": [r"\d{10}(?:-\d{3})?"]},
    tu_dien_tuy_chinh={"dia_danh": {"Cần Thơ", "An Giang"}},
)

ner.them_dia_danh("Bình Dương", "Đồng Nai")
ner.them_chuc_danh("CEO", "CTO")
ner.them_mau("SO_TAI_KHOAN", r"\d{6,14}")

Tham số

Tham số Mặc định Mô tả
su_dung_underthesea True Dùng underthesea cho PERSON
mau_tuy_chinh None Regex patterns tùy chỉnh
tu_dien_tuy_chinh None Dictionary tùy chỉnh

HoiDapTiengViet

Hệ thống hỏi đáp (Question Answering) cho tiếng Việt.

Cơ bản

from vietnamese_ai import HoiDapTiengViet

qa = HoiDapTiengViet(so_cau_toi_da=5, toi_thieu_diem=0.1)

qa.them_tai_lieu("doc1", "Học máy là nhánh của AI. Máy học từ dữ liệu.")
qa.them_tai_lieu("doc2", "Học sâu sử dụng mạng nơ-ron nhiều lớp.")

ket_qua = qa.hoi("Học máy là gì?")
print(ket_qua["tra_loi"])
print(ket_qua["nguon"])

Kết quả

{
    "cau_hoi": "Học máy là gì?",
    "tra_loi": "Học máy là nhánh của AI",
    "nguon": [
        {"cau": "Học máy là nhánh của AI", "tai_lieu": "doc1", "diem": 0.85},
        ...
    ],
    "diem": 0.85,
}

Tham số

Tham số Mặc định Mô tả
so_cau_toi_da 5 Số câu trả lời tối đa
toi_thieu_diem 0.1 Ngưỡng điểm tối thiểu

TomTatVanBan

Tóm tắt văn bản tiếng Việt.

Extractive (mặc định)

from vietnamese_ai import TomTatVanBan

tom_tat = TomTatVanBan(che_do="extractive")
ket_qua = tom_tat.tom_tat(van_ban_dai, so_cau=3)

print(ket_qua["tom_tat"])
print(f"Tỷ lệ nén: {ket_qua['ty_le_nen']:.2%}")

Abstractive (với LLM)

tom_tat = TomTatVanBan(che_do="abstractive", ham_sinh=my_llm)
ket_qua = tom_tat.tom_tat(van_ban, toi_da_tu=100)

Tham số

Tham số Mặc định Mô tả
che_do "extractive" extractive hoặc abstractive
so_cau 3 Số câu tóm tắt (extractive)
toi_da_tu None Giới hạn số từ
trong_so_vi_tri 0.3 Trọng số vị trí câu
trong_so_tfidf 0.5 Trọng số TF-IDF
trong_so_do_dai 0.2 Trọng số độ dài câu

Tóm tắt nhiều văn bản

ket_qua_list = tom_tat.tom_tat_nhieu([van_ban_1, van_ban_2], so_cau=2)

DichThuat

Dịch thuật cho tiếng Việt.

Dictionary-based

from vietnamese_ai import DichThuat

dich = DichThuat(che_do="dictionary")
ket_qua = dich.dich("hello world", nguon="en", dich="vi")
print(ket_qua["dich"])
# "xin chào thế giới"

LLM-based

dich = DichThuat(che_do="llm", ham_sinh=my_llm)
ket_qua = dich.dich("Machine learning is fascinating", nguon="en", dich="vi")

Hybrid

dich = DichThuat(che_do="hybrid", ham_sinh=my_llm)
# Dịch từ điển trước, dùng LLM cho từ chưa có trong từ điển

Tùy chỉnh từ điển

dich.them_tu_dien("en_vi", {
    "transformer": "mô hình biến đổi",
    "attention": "cơ chế chú ý",
    "embedding": "nhúng",
})

Batch dịch

ket_qua = dich.dich_batch(["hello", "world", "AI"], nguon="en", dich="vi")

Tham số

Tham số Mặc định Mô tả
che_do "dictionary" dictionary, llm, hybrid
ham_sinh None Hàm sinh LLM

KiemTraChinhTa

Kiểm tra và sửa lỗi chính tả tiếng Việt.

Cơ bản

from vietnamese_ai import KiemTraChinhTa

kt = KiemTraChinhTa()
kt.them_tu_dien({"xin chào", "thế giới", "học máy", "trí tuệ"})

ket_qua = kt.kiem_tra("xin chao the gioi hoc may")
print(f"Lỗi: {ket_qua['so_loi']}")
for loi in ket_qua["loi"]:
    print(f"  '{loi['tu']}' -> gợi ý: {loi['goi_y']}")

Sửa tự động

van_ban_sua = kt.sua("xin chao the gioi")
print(van_ban_sua)
# "xin chào thế giới"

Học từ corpus

corpus = [
    "Trí tuệ nhân tạo đang phát triển mạnh.",
    "Học máy giúp máy tính học từ dữ liệu.",
]
kt.huan_luyen_tu_corpus(corpus)

Lỗi phổ biến được sửa tự động

Sai Đúng
khong không
duoc được
cua của
nguoi người
hoc học
lam làm
nhung nhưng
muon muốn

Tham số

Tham số Mặc định Mô tả
su_dung_underthesea True Dùng underthesea để tách từ
toi_da_sua 5 Số gợi ý tối đa mỗi từ
nguong_khoang_cach 2 Edit distance tối đa

Kết hợp NLP Pipeline

from vietnamese_ai import (
    NhanDienThucThe, HoiDapTiengViet,
    TomTatVanBan, KiemTraChinhTa,
)

ner = NhanDienThucThe()
qa = HoiDapTiengViet()
tom_tat = TomTatVanBan()
kt = KiemTraChinhTa()

van_ban = "Học máy là nhánh của AI, giúp máy tính học từ dữ liệu."

entities = ner.nhan_dien(van_ban)
qa.them_tai_lieu("doc", van_ban)
cau_tra_loi = qa.hoi("Học máy là gì?")
tom_tat_van_ban = tom_tat.tom_tat(van_ban, so_cau=1)
van_ban_sua = kt.sua(van_ban)