فهرست مستندات پروژه
خواندن نتیجه، گزینهها و امتیاز اطمینان
ساختار پاسخ را بخوانید و موقعیت ورودی و امتیاز رتبهبندی را درست تفسیر کنید.
بررسی یک واژه مبهم
از بارگذار ترکیبی Node.js استفاده کنید و این مثال را کنار hybrid.mjs ذخیره کنید. مثال با سه گزینه و سه خروجی جایگزین پیشفرض در نسخه منبع ثبتشده اجرا شده است.
import { engine } from "./hybrid.mjs";
const result = engine.transliterate("hamele");
console.log(result.text);
console.log(JSON.stringify(result.alternatives));
console.log(result.confidence);
console.log(JSON.stringify(result.spans[0].candidates.map(
({ output, probability }) => ({ output, probability }),
)));
حمله
["حامل","حمل"]
0.9566
[{"output":"حمله","probability":0.9566},{"output":"حامل","probability":0.0357},{"output":"حمل","probability":0.0077}]
ممکن است منظور نویسنده از hamele خوانش دیگری باشد، اما فهرست پیشفرض برگرداندهشده شامل حامله نیست. این یک محدودیت مهم است: امتیاز بالا اطلاعاتی را که در مجموعه گزینهها نیست بازیابی نمیکند. گزینه دلخواه را به نتیجه ثبتشده موتور اضافه نکنید.
فیلدهای نتیجه
| فیلد | معنی |
|---|---|
text | خروجی اصلی؛ برابر با اتصال خروجی همه بخشها |
alternatives | حداکثر تعداد درخواستی پیشنهادهای متفاوت برای کل متن، بدون خود text |
confidence | میانگین هندسی گردشده امتیاز بخشهای تبدیلشده؛ اگر چیزی تبدیل نشود 1 |
spans | بخشهای مرتب که همه ورودی اصلی، شامل فاصله و نشانهگذاری، را میپوشانند |
خروجیهای جایگزین هر بار فقط یک گزینه از یک بخش را عوض میکنند و از بخشهای کماطمینانتر شروع میشوند. همه ترکیبهای ممکن جستوجو نمیشوند و جمله کامل دوباره امتیاز نمیگیرد. این جایگزینی ممکن است هماهنگی یا پیوند ایجادشده در پردازش جمله را به هم بزند. فهرست میتواند کوتاهتر از درخواست یا خالی باشد.
بخشها و موقعیت در ورودی
هر بخش، input، output، start، end، action و confidence دارد. start ابتدای بازه و end نخستین موقعیت بیرون آن است. این موقعیتها بر حسب واحد کد UTF-16 جاوااسکریپت در ورودی اصلیاند؛ نه بایت، تعداد نویسه یونیکد، تعداد حروف دیدهشده یا موقعیت در خروجی تبدیلشده. همیشه از source.slice(start, end) استفاده کنید.
import { engine } from "./hybrid.mjs";
const source = "😀 salam";
const result = engine.transliterate(source);
const word = result.spans.find(span => span.action === "convert");
console.log(word.start, word.end, source.slice(word.start, word.end), word.output);
console.log(result.spans.map(span => span.output).join("") === result.text);
console.log(engine.transliterate("sal e no").text);
3 8 salam سلام
true
سال نو
ایموجی دو واحد کد اشغال میکند. در sal e no، پردازش جمله e جدا و فاصله قبل از آن را حذف میکند؛ این بخشها با خروجی خالی در آرایه میمانند. پیوندهای دیگر ممکن است چند واژه خروجی را در یک بخش قرار دهند. فرض نکنید هر بخش یک واژه نمایشی است یا خروجی فاصله همیشه با ورودی آن برابر است.
| عمل | اطلاعات بیشتر و تفسیر |
|---|---|
convert | گزینههای candidates؛ اگر تعداد مثبت درخواست شود، خروجی انتخابشده اول است |
copy | دلیل در copyReason؛ خروجی با ورودی برابر است |
punct | نشانهگذاری، با احتمال تبدیل به فارسی |
space | فاصله که ممکن است هنگام پیوند حذف شود |
نوع عمومی copyReason شامل url، email، mention، hashtag، number، code، emoji، english، non-latin و unknown-script است. جداساز فعلی لزوما همه این دلیلها را تولید نمیکند. هر گزینه output، probability و توضیح reason دارد. توضیح را متن عیبیابی بدانید، نه شناسه ثابتی برای پردازش ماشینی.
امتیاز اطمینان چه چیزی را نشان میدهد؟
قواعد با تابع نمایی، امتیازهای رتبهبندی را به وزن نسبی تبدیل میکنند. رمزگشایی مدل از امتیازهای نرمالشده جستوجو استفاده میکند و روش ترکیبی شواهد مدل را با امتیاز قواعد جمع میکند. مراحل واکه، وامواژه و جمله میتوانند این مقدارها را تغییر دهند و گاهی امتیاز ثابت یا 1 بدهند. اطمینان بخش معمولا امتیاز گزینه انتخابشده است. بافت جمله ممکن است گزینهای با امتیاز کمتر را جلو بیاورد؛ پس ترتیب خروجی لزوما از نظر عددی نزولی نیست.
فهرست گزینهها پس از پردازش کوتاه میشود و نرمالسازی دوباره تضمین نشده است؛ امتیازها هم گرد میشوند. برخلاف توضیح قدیمی نوع عمومی، نباید فرض کنید جمع احتمالهای نمایشی 1 است. اطمینان کل، exp(mean(log(max(span.confidence, 1e-9)))) روی بخشهای convert است و تا چهار رقم اعشار گرد میشود. امتیاز بخشهای کپی، نشانه و فاصله 1 است و در این میانگین نمیآید. بنابراین ورودی خالی یا کاملا انگلیسی میتواند امتیاز کل 1 داشته باشد، بدون اینکه املای فارسی بررسی شده باشد.
هیچیک از این مقدارها دقت واقعی کالیبرهشده یا فاصله اطمینان آماری نیست. از آنها برای هدایت بازبینی استفاده کنید، نه ادعای «۹۵ درصد درست». معیارهای ارزیابی را از اطمینان نمایشی جدا نگه دارید.