mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 09:26:27 +03:00
Tidy up and auto-format
This commit is contained in:
parent
b57be94c78
commit
991669c934
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -51,6 +51,7 @@ env3.*/
|
||||||
.pypyenv
|
.pypyenv
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
|
.hypothesis/
|
||||||
|
|
||||||
# Distribution / packaging
|
# Distribution / packaging
|
||||||
env/
|
env/
|
||||||
|
|
|
@ -35,7 +35,10 @@ def download_cli(
|
||||||
|
|
||||||
|
|
||||||
def download(model: str, direct: bool = False, *pip_args) -> None:
|
def download(model: str, direct: bool = False, *pip_args) -> None:
|
||||||
if not (is_package("spacy") or is_package("spacy-nightly")) and "--no-deps" not in pip_args:
|
if (
|
||||||
|
not (is_package("spacy") or is_package("spacy-nightly"))
|
||||||
|
and "--no-deps" not in pip_args
|
||||||
|
):
|
||||||
msg.warn(
|
msg.warn(
|
||||||
"Skipping pipeline package dependencies and setting `--no-deps`. "
|
"Skipping pipeline package dependencies and setting `--no-deps`. "
|
||||||
"You don't seem to have the spaCy package itself installed "
|
"You don't seem to have the spaCy package itself installed "
|
||||||
|
|
|
@ -172,7 +172,9 @@ def render_parses(
|
||||||
file_.write(html)
|
file_.write(html)
|
||||||
|
|
||||||
|
|
||||||
def print_prf_per_type(msg: Printer, scores: Dict[str, Dict[str, float]], name: str, type: str) -> None:
|
def print_prf_per_type(
|
||||||
|
msg: Printer, scores: Dict[str, Dict[str, float]], name: str, type: str
|
||||||
|
) -> None:
|
||||||
data = [
|
data = [
|
||||||
(k, f"{v['p']*100:.2f}", f"{v['r']*100:.2f}", f"{v['f']*100:.2f}")
|
(k, f"{v['p']*100:.2f}", f"{v['r']*100:.2f}", f"{v['f']*100:.2f}")
|
||||||
for k, v in scores.items()
|
for k, v in scores.items()
|
||||||
|
|
|
@ -214,8 +214,22 @@ _macedonian_lower = r"ѓѕјљњќѐѝ"
|
||||||
_macedonian_upper = r"ЃЅЈЉЊЌЀЍ"
|
_macedonian_upper = r"ЃЅЈЉЊЌЀЍ"
|
||||||
_macedonian = r"ѓѕјљњќѐѝЃЅЈЉЊЌЀЍ"
|
_macedonian = r"ѓѕјљњќѐѝЃЅЈЉЊЌЀЍ"
|
||||||
|
|
||||||
_upper = LATIN_UPPER + _russian_upper + _tatar_upper + _greek_upper + _ukrainian_upper + _macedonian_upper
|
_upper = (
|
||||||
_lower = LATIN_LOWER + _russian_lower + _tatar_lower + _greek_lower + _ukrainian_lower + _macedonian_lower
|
LATIN_UPPER
|
||||||
|
+ _russian_upper
|
||||||
|
+ _tatar_upper
|
||||||
|
+ _greek_upper
|
||||||
|
+ _ukrainian_upper
|
||||||
|
+ _macedonian_upper
|
||||||
|
)
|
||||||
|
_lower = (
|
||||||
|
LATIN_LOWER
|
||||||
|
+ _russian_lower
|
||||||
|
+ _tatar_lower
|
||||||
|
+ _greek_lower
|
||||||
|
+ _ukrainian_lower
|
||||||
|
+ _macedonian_lower
|
||||||
|
)
|
||||||
|
|
||||||
_uncased = (
|
_uncased = (
|
||||||
_bengali
|
_bengali
|
||||||
|
@ -230,7 +244,9 @@ _uncased = (
|
||||||
+ _cjk
|
+ _cjk
|
||||||
)
|
)
|
||||||
|
|
||||||
ALPHA = group_chars(LATIN + _russian + _tatar + _greek + _ukrainian + _macedonian + _uncased)
|
ALPHA = group_chars(
|
||||||
|
LATIN + _russian + _tatar + _greek + _ukrainian + _macedonian + _uncased
|
||||||
|
)
|
||||||
ALPHA_LOWER = group_chars(_lower + _uncased)
|
ALPHA_LOWER = group_chars(_lower + _uncased)
|
||||||
ALPHA_UPPER = group_chars(_upper + _uncased)
|
ALPHA_UPPER = group_chars(_upper + _uncased)
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,11 @@
|
||||||
from .stop_words import STOP_WORDS
|
from .stop_words import STOP_WORDS
|
||||||
from .tag_map import TAG_MAP
|
|
||||||
from ...language import Language
|
|
||||||
from ...attrs import LANG
|
|
||||||
from .lex_attrs import LEX_ATTRS
|
from .lex_attrs import LEX_ATTRS
|
||||||
from ...language import Language
|
from ...language import Language
|
||||||
|
|
||||||
|
|
||||||
class CzechDefaults(Language.Defaults):
|
class CzechDefaults(Language.Defaults):
|
||||||
lex_attr_getters = dict(Language.Defaults.lex_attr_getters)
|
|
||||||
lex_attr_getters.update(LEX_ATTRS)
|
|
||||||
lex_attr_getters[LANG] = lambda text: "cs"
|
|
||||||
tag_map = TAG_MAP
|
|
||||||
stop_words = STOP_WORDS
|
|
||||||
lex_attr_getters = LEX_ATTRS
|
lex_attr_getters = LEX_ATTRS
|
||||||
|
stop_words = STOP_WORDS
|
||||||
|
|
||||||
|
|
||||||
class Czech(Language):
|
class Czech(Language):
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -14,7 +14,7 @@ class MacedonianLemmatizer(Lemmatizer):
|
||||||
if univ_pos in ("", "eol", "space"):
|
if univ_pos in ("", "eol", "space"):
|
||||||
return [string.lower()]
|
return [string.lower()]
|
||||||
|
|
||||||
if string[-3:] == 'јќи':
|
if string[-3:] == "јќи":
|
||||||
string = string[:-3]
|
string = string[:-3]
|
||||||
univ_pos = "verb"
|
univ_pos = "verb"
|
||||||
|
|
||||||
|
@ -23,7 +23,13 @@ class MacedonianLemmatizer(Lemmatizer):
|
||||||
index_table = self.lookups.get_table("lemma_index", {})
|
index_table = self.lookups.get_table("lemma_index", {})
|
||||||
exc_table = self.lookups.get_table("lemma_exc", {})
|
exc_table = self.lookups.get_table("lemma_exc", {})
|
||||||
rules_table = self.lookups.get_table("lemma_rules", {})
|
rules_table = self.lookups.get_table("lemma_rules", {})
|
||||||
if not any((index_table.get(univ_pos), exc_table.get(univ_pos), rules_table.get(univ_pos))):
|
if not any(
|
||||||
|
(
|
||||||
|
index_table.get(univ_pos),
|
||||||
|
exc_table.get(univ_pos),
|
||||||
|
rules_table.get(univ_pos),
|
||||||
|
)
|
||||||
|
):
|
||||||
if univ_pos == "propn":
|
if univ_pos == "propn":
|
||||||
return [string]
|
return [string]
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,21 +1,104 @@
|
||||||
from ...attrs import LIKE_NUM
|
from ...attrs import LIKE_NUM
|
||||||
|
|
||||||
_num_words = [
|
_num_words = [
|
||||||
"нула", "еден", "една", "едно", "два", "две", "три", "четири", "пет", "шест", "седум", "осум", "девет", "десет",
|
"нула",
|
||||||
"единаесет", "дванаесет", "тринаесет", "четиринаесет", "петнаесет", "шеснаесет", "седумнаесет", "осумнаесет",
|
"еден",
|
||||||
"деветнаесет", "дваесет", "триесет", "четириесет", "педесет", "шеесет", "седумдесет", "осумдесет", "деведесет",
|
"една",
|
||||||
"сто", "двесте", "триста", "четиристотини", "петстотини", "шестотини", "седумстотини", "осумстотини",
|
"едно",
|
||||||
"деветстотини", "илјада", "илјади", 'милион', 'милиони', 'милијарда', 'милијарди', 'билион', 'билиони',
|
"два",
|
||||||
|
"две",
|
||||||
"двајца", "тројца", "четворица", "петмина", "шестмина", "седуммина", "осуммина", "деветмина", "обата", "обајцата",
|
"три",
|
||||||
|
"четири",
|
||||||
"прв", "втор", "трет", "четврт", "седм", "осм", "двестоти",
|
"пет",
|
||||||
|
"шест",
|
||||||
"два-три", "два-триесет", "два-триесетмина", "два-тринаесет", "два-тројца", "две-три", "две-тристотини",
|
"седум",
|
||||||
"пет-шеесет", "пет-шеесетмина", "пет-шеснаесетмина", "пет-шест", "пет-шестмина", "пет-шестотини", "петина",
|
"осум",
|
||||||
"осмина", "седум-осум", "седум-осумдесет", "седум-осуммина", "седум-осумнаесет", "седум-осумнаесетмина",
|
"девет",
|
||||||
"три-четириесет", "три-четиринаесет", "шеесет", "шеесетина", "шеесетмина", "шеснаесет", "шеснаесетмина",
|
"десет",
|
||||||
"шест-седум", "шест-седумдесет", "шест-седумнаесет", "шест-седумстотини", "шестоти", "шестотини"
|
"единаесет",
|
||||||
|
"дванаесет",
|
||||||
|
"тринаесет",
|
||||||
|
"четиринаесет",
|
||||||
|
"петнаесет",
|
||||||
|
"шеснаесет",
|
||||||
|
"седумнаесет",
|
||||||
|
"осумнаесет",
|
||||||
|
"деветнаесет",
|
||||||
|
"дваесет",
|
||||||
|
"триесет",
|
||||||
|
"четириесет",
|
||||||
|
"педесет",
|
||||||
|
"шеесет",
|
||||||
|
"седумдесет",
|
||||||
|
"осумдесет",
|
||||||
|
"деведесет",
|
||||||
|
"сто",
|
||||||
|
"двесте",
|
||||||
|
"триста",
|
||||||
|
"четиристотини",
|
||||||
|
"петстотини",
|
||||||
|
"шестотини",
|
||||||
|
"седумстотини",
|
||||||
|
"осумстотини",
|
||||||
|
"деветстотини",
|
||||||
|
"илјада",
|
||||||
|
"илјади",
|
||||||
|
"милион",
|
||||||
|
"милиони",
|
||||||
|
"милијарда",
|
||||||
|
"милијарди",
|
||||||
|
"билион",
|
||||||
|
"билиони",
|
||||||
|
"двајца",
|
||||||
|
"тројца",
|
||||||
|
"четворица",
|
||||||
|
"петмина",
|
||||||
|
"шестмина",
|
||||||
|
"седуммина",
|
||||||
|
"осуммина",
|
||||||
|
"деветмина",
|
||||||
|
"обата",
|
||||||
|
"обајцата",
|
||||||
|
"прв",
|
||||||
|
"втор",
|
||||||
|
"трет",
|
||||||
|
"четврт",
|
||||||
|
"седм",
|
||||||
|
"осм",
|
||||||
|
"двестоти",
|
||||||
|
"два-три",
|
||||||
|
"два-триесет",
|
||||||
|
"два-триесетмина",
|
||||||
|
"два-тринаесет",
|
||||||
|
"два-тројца",
|
||||||
|
"две-три",
|
||||||
|
"две-тристотини",
|
||||||
|
"пет-шеесет",
|
||||||
|
"пет-шеесетмина",
|
||||||
|
"пет-шеснаесетмина",
|
||||||
|
"пет-шест",
|
||||||
|
"пет-шестмина",
|
||||||
|
"пет-шестотини",
|
||||||
|
"петина",
|
||||||
|
"осмина",
|
||||||
|
"седум-осум",
|
||||||
|
"седум-осумдесет",
|
||||||
|
"седум-осуммина",
|
||||||
|
"седум-осумнаесет",
|
||||||
|
"седум-осумнаесетмина",
|
||||||
|
"три-четириесет",
|
||||||
|
"три-четиринаесет",
|
||||||
|
"шеесет",
|
||||||
|
"шеесетина",
|
||||||
|
"шеесетмина",
|
||||||
|
"шеснаесет",
|
||||||
|
"шеснаесетмина",
|
||||||
|
"шест-седум",
|
||||||
|
"шест-седумдесет",
|
||||||
|
"шест-седумнаесет",
|
||||||
|
"шест-седумстотини",
|
||||||
|
"шестоти",
|
||||||
|
"шестотини",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,7 @@ _abbr_exc = [
|
||||||
{ORTH: "хл", NORM: "хектолитар"},
|
{ORTH: "хл", NORM: "хектолитар"},
|
||||||
{ORTH: "дкл", NORM: "декалитар"},
|
{ORTH: "дкл", NORM: "декалитар"},
|
||||||
{ORTH: "л", NORM: "литар"},
|
{ORTH: "л", NORM: "литар"},
|
||||||
{ORTH: "дл", NORM: "децилитар"}
|
{ORTH: "дл", NORM: "децилитар"},
|
||||||
|
|
||||||
]
|
]
|
||||||
for abbr in _abbr_exc:
|
for abbr in _abbr_exc:
|
||||||
_exc[abbr[ORTH]] = [abbr]
|
_exc[abbr[ORTH]] = [abbr]
|
||||||
|
@ -33,7 +32,6 @@ _abbr_line_exc = [
|
||||||
{ORTH: "г-ѓа", NORM: "госпоѓа"},
|
{ORTH: "г-ѓа", NORM: "госпоѓа"},
|
||||||
{ORTH: "г-ца", NORM: "госпоѓица"},
|
{ORTH: "г-ца", NORM: "госпоѓица"},
|
||||||
{ORTH: "г-дин", NORM: "господин"},
|
{ORTH: "г-дин", NORM: "господин"},
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
for abbr in _abbr_line_exc:
|
for abbr in _abbr_line_exc:
|
||||||
|
@ -54,7 +52,6 @@ _abbr_dot_exc = [
|
||||||
{ORTH: "т.", NORM: "точка"},
|
{ORTH: "т.", NORM: "точка"},
|
||||||
{ORTH: "т.е.", NORM: "то ест"},
|
{ORTH: "т.е.", NORM: "то ест"},
|
||||||
{ORTH: "т.н.", NORM: "таканаречен"},
|
{ORTH: "т.н.", NORM: "таканаречен"},
|
||||||
|
|
||||||
{ORTH: "бр.", NORM: "број"},
|
{ORTH: "бр.", NORM: "број"},
|
||||||
{ORTH: "гр.", NORM: "град"},
|
{ORTH: "гр.", NORM: "град"},
|
||||||
{ORTH: "др.", NORM: "другар"},
|
{ORTH: "др.", NORM: "другар"},
|
||||||
|
@ -68,7 +65,6 @@ _abbr_dot_exc = [
|
||||||
{ORTH: "с.", NORM: "страница"},
|
{ORTH: "с.", NORM: "страница"},
|
||||||
{ORTH: "стр.", NORM: "страница"},
|
{ORTH: "стр.", NORM: "страница"},
|
||||||
{ORTH: "чл.", NORM: "член"},
|
{ORTH: "чл.", NORM: "член"},
|
||||||
|
|
||||||
{ORTH: "арх.", NORM: "архитект"},
|
{ORTH: "арх.", NORM: "архитект"},
|
||||||
{ORTH: "бел.", NORM: "белешка"},
|
{ORTH: "бел.", NORM: "белешка"},
|
||||||
{ORTH: "гимн.", NORM: "гимназија"},
|
{ORTH: "гимн.", NORM: "гимназија"},
|
||||||
|
@ -89,8 +85,6 @@ _abbr_dot_exc = [
|
||||||
{ORTH: "истор.", NORM: "историја"},
|
{ORTH: "истор.", NORM: "историја"},
|
||||||
{ORTH: "геогр.", NORM: "географија"},
|
{ORTH: "геогр.", NORM: "географија"},
|
||||||
{ORTH: "литер.", NORM: "литература"},
|
{ORTH: "литер.", NORM: "литература"},
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
for abbr in _abbr_dot_exc:
|
for abbr in _abbr_dot_exc:
|
||||||
|
|
|
@ -163,7 +163,6 @@ for abbr in _abbr_exc:
|
||||||
_exc[abbr[ORTH]] = [abbr]
|
_exc[abbr[ORTH]] = [abbr]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_num = r"[+-]?\d+([,.]\d+)*"
|
_num = r"[+-]?\d+([,.]\d+)*"
|
||||||
_ord_num = r"(\d+\.)"
|
_ord_num = r"(\d+\.)"
|
||||||
_date = r"(((\d{1,2}[./-]){2})?(\d{4})|(\d{1,2}[./]\d{1,2}(\.)?))"
|
_date = r"(((\d{1,2}[./-]){2})?(\d{4})|(\d{1,2}[./]\d{1,2}(\.)?))"
|
||||||
|
@ -175,7 +174,18 @@ _time_exp = r"\d+(:\d+)*"
|
||||||
_inflections = r"'[{al}]+".format(al=ALPHA_LOWER)
|
_inflections = r"'[{al}]+".format(al=ALPHA_LOWER)
|
||||||
_abbrev_inflected = r"[{a}]+\.'[{al}]+".format(a=ALPHA, al=ALPHA_LOWER)
|
_abbrev_inflected = r"[{a}]+\.'[{al}]+".format(a=ALPHA, al=ALPHA_LOWER)
|
||||||
|
|
||||||
_nums = r"(({d})|({dn})|({te})|({on})|({n})|({ro})|({rn}))({inf})?".format(d=_date, dn=_dash_num, te=_time_exp, on=_ord_num, n=_num, ro=_roman_ord, rn=_roman_num, inf=_inflections)
|
_nums = r"(({d})|({dn})|({te})|({on})|({n})|({ro})|({rn}))({inf})?".format(
|
||||||
|
d=_date,
|
||||||
|
dn=_dash_num,
|
||||||
|
te=_time_exp,
|
||||||
|
on=_ord_num,
|
||||||
|
n=_num,
|
||||||
|
ro=_roman_ord,
|
||||||
|
rn=_roman_num,
|
||||||
|
inf=_inflections,
|
||||||
|
)
|
||||||
|
|
||||||
TOKENIZER_EXCEPTIONS = _exc
|
TOKENIZER_EXCEPTIONS = _exc
|
||||||
TOKEN_MATCH = re.compile(r"^({abbr})|({n})$".format(n=_nums, abbr=_abbrev_inflected)).match
|
TOKEN_MATCH = re.compile(
|
||||||
|
r"^({abbr})|({n})$".format(n=_nums, abbr=_abbrev_inflected)
|
||||||
|
).match
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import numpy
|
|
||||||
from thinc.api import Model
|
from thinc.api import Model
|
||||||
|
|
||||||
from ..attrs import LOWER
|
from ..attrs import LOWER
|
||||||
|
|
|
@ -51,6 +51,7 @@ def transition_parser_v2(
|
||||||
nO,
|
nO,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def build_tb_parser_model(
|
def build_tb_parser_model(
|
||||||
tok2vec: Model[List[Doc], List[Floats2d]],
|
tok2vec: Model[List[Doc], List[Floats2d]],
|
||||||
state_type: Literal["parser", "ner"],
|
state_type: Literal["parser", "ner"],
|
||||||
|
|
|
@ -72,7 +72,9 @@ def build_text_classifier_v2(
|
||||||
cnn_model = (
|
cnn_model = (
|
||||||
tok2vec
|
tok2vec
|
||||||
>> list2ragged()
|
>> list2ragged()
|
||||||
>> ParametricAttention(width) # TODO: benchmark performance difference of this layer
|
>> ParametricAttention(
|
||||||
|
width
|
||||||
|
) # TODO: benchmark performance difference of this layer
|
||||||
>> reduce_sum()
|
>> reduce_sum()
|
||||||
>> residual(Maxout(nO=width, nI=width))
|
>> residual(Maxout(nO=width, nI=width))
|
||||||
>> Linear(nO=nO, nI=width)
|
>> Linear(nO=nO, nI=width)
|
||||||
|
@ -92,6 +94,7 @@ def build_text_classifier_v2(
|
||||||
model.attrs["multi_label"] = not exclusive_classes
|
model.attrs["multi_label"] = not exclusive_classes
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
|
||||||
# TODO: move to legacy
|
# TODO: move to legacy
|
||||||
@registry.architectures.register("spacy.TextCatEnsemble.v1")
|
@registry.architectures.register("spacy.TextCatEnsemble.v1")
|
||||||
def build_text_classifier_v1(
|
def build_text_classifier_v1(
|
||||||
|
|
|
@ -47,8 +47,7 @@ def forward(
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise RuntimeError(Errors.E896)
|
raise RuntimeError(Errors.E896)
|
||||||
output = Ragged(
|
output = Ragged(
|
||||||
vectors_data,
|
vectors_data, model.ops.asarray([len(doc) for doc in docs], dtype="i")
|
||||||
model.ops.asarray([len(doc) for doc in docs], dtype="i")
|
|
||||||
)
|
)
|
||||||
mask = None
|
mask = None
|
||||||
if is_train:
|
if is_train:
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from thinc.api import Model, noop, use_ops, Linear
|
from thinc.api import Model, noop
|
||||||
from .parser_model import ParserStepModel
|
from .parser_model import ParserStepModel
|
||||||
|
|
||||||
|
|
||||||
def TransitionModel(tok2vec, lower, upper, resize_output, dropout=0.2, unseen_classes=set()):
|
def TransitionModel(
|
||||||
|
tok2vec, lower, upper, resize_output, dropout=0.2, unseen_classes=set()
|
||||||
|
):
|
||||||
"""Set up a stepwise transition-based model"""
|
"""Set up a stepwise transition-based model"""
|
||||||
if upper is None:
|
if upper is None:
|
||||||
has_upper = False
|
has_upper = False
|
||||||
|
@ -44,4 +46,3 @@ def init(model, X=None, Y=None):
|
||||||
if model.attrs["has_upper"]:
|
if model.attrs["has_upper"]:
|
||||||
statevecs = model.ops.alloc2f(2, lower.get_dim("nO"))
|
statevecs = model.ops.alloc2f(2, lower.get_dim("nO"))
|
||||||
model.get_ref("upper").initialize(X=statevecs)
|
model.get_ref("upper").initialize(X=statevecs)
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,7 @@ class AttributeRuler(Pipe):
|
||||||
|
|
||||||
DOCS: https://nightly.spacy.io/api/tagger#score
|
DOCS: https://nightly.spacy.io/api/tagger#score
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def morph_key_getter(token, attr):
|
def morph_key_getter(token, attr):
|
||||||
return getattr(token, attr).key
|
return getattr(token, attr).key
|
||||||
|
|
||||||
|
@ -240,8 +241,16 @@ class AttributeRuler(Pipe):
|
||||||
elif attr == POS:
|
elif attr == POS:
|
||||||
results.update(Scorer.score_token_attr(examples, "pos", **kwargs))
|
results.update(Scorer.score_token_attr(examples, "pos", **kwargs))
|
||||||
elif attr == MORPH:
|
elif attr == MORPH:
|
||||||
results.update(Scorer.score_token_attr(examples, "morph", getter=morph_key_getter, **kwargs))
|
results.update(
|
||||||
results.update(Scorer.score_token_attr_per_feat(examples, "morph", getter=morph_key_getter, **kwargs))
|
Scorer.score_token_attr(
|
||||||
|
examples, "morph", getter=morph_key_getter, **kwargs
|
||||||
|
)
|
||||||
|
)
|
||||||
|
results.update(
|
||||||
|
Scorer.score_token_attr_per_feat(
|
||||||
|
examples, "morph", getter=morph_key_getter, **kwargs
|
||||||
|
)
|
||||||
|
)
|
||||||
elif attr == LEMMA:
|
elif attr == LEMMA:
|
||||||
results.update(Scorer.score_token_attr(examples, "lemma", **kwargs))
|
results.update(Scorer.score_token_attr(examples, "lemma", **kwargs))
|
||||||
return results
|
return results
|
||||||
|
|
|
@ -3,7 +3,7 @@ import numpy as np
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from .training import Example
|
from .training import Example
|
||||||
from .tokens import Token, Doc, Span, MorphAnalysis
|
from .tokens import Token, Doc, Span
|
||||||
from .errors import Errors
|
from .errors import Errors
|
||||||
from .util import get_lang_class, SimpleFrozenList
|
from .util import get_lang_class, SimpleFrozenList
|
||||||
from .morphology import Morphology
|
from .morphology import Morphology
|
||||||
|
@ -176,7 +176,7 @@ class Scorer:
|
||||||
"token_acc": None,
|
"token_acc": None,
|
||||||
"token_p": None,
|
"token_p": None,
|
||||||
"token_r": None,
|
"token_r": None,
|
||||||
"token_f": None
|
"token_f": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -276,7 +276,10 @@ class Scorer:
|
||||||
if gold_i not in missing_indices:
|
if gold_i not in missing_indices:
|
||||||
value = getter(token, attr)
|
value = getter(token, attr)
|
||||||
morph = gold_doc.vocab.strings[value]
|
morph = gold_doc.vocab.strings[value]
|
||||||
if value not in missing_values and morph != Morphology.EMPTY_MORPH:
|
if (
|
||||||
|
value not in missing_values
|
||||||
|
and morph != Morphology.EMPTY_MORPH
|
||||||
|
):
|
||||||
for feat in morph.split(Morphology.FEATURE_SEP):
|
for feat in morph.split(Morphology.FEATURE_SEP):
|
||||||
field, values = feat.split(Morphology.FIELD_SEP)
|
field, values = feat.split(Morphology.FIELD_SEP)
|
||||||
if field not in per_feat:
|
if field not in per_feat:
|
||||||
|
@ -367,7 +370,6 @@ class Scorer:
|
||||||
f"{attr}_per_type": None,
|
f"{attr}_per_type": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def score_cats(
|
def score_cats(
|
||||||
examples: Iterable[Example],
|
examples: Iterable[Example],
|
||||||
|
@ -473,7 +475,10 @@ class Scorer:
|
||||||
macro_f = sum(prf.fscore for prf in f_per_type.values()) / n_cats
|
macro_f = sum(prf.fscore for prf in f_per_type.values()) / n_cats
|
||||||
# Limit macro_auc to those labels with gold annotations,
|
# Limit macro_auc to those labels with gold annotations,
|
||||||
# but still divide by all cats to avoid artificial boosting of datasets with missing labels
|
# but still divide by all cats to avoid artificial boosting of datasets with missing labels
|
||||||
macro_auc = sum(auc.score if auc.is_binary() else 0.0 for auc in auc_per_type.values()) / n_cats
|
macro_auc = (
|
||||||
|
sum(auc.score if auc.is_binary() else 0.0 for auc in auc_per_type.values())
|
||||||
|
/ n_cats
|
||||||
|
)
|
||||||
results = {
|
results = {
|
||||||
f"{attr}_score": None,
|
f"{attr}_score": None,
|
||||||
f"{attr}_score_desc": None,
|
f"{attr}_score_desc": None,
|
||||||
|
@ -485,7 +490,9 @@ class Scorer:
|
||||||
f"{attr}_macro_f": macro_f,
|
f"{attr}_macro_f": macro_f,
|
||||||
f"{attr}_macro_auc": macro_auc,
|
f"{attr}_macro_auc": macro_auc,
|
||||||
f"{attr}_f_per_type": {k: v.to_dict() for k, v in f_per_type.items()},
|
f"{attr}_f_per_type": {k: v.to_dict() for k, v in f_per_type.items()},
|
||||||
f"{attr}_auc_per_type": {k: v.score if v.is_binary() else None for k, v in auc_per_type.items()},
|
f"{attr}_auc_per_type": {
|
||||||
|
k: v.score if v.is_binary() else None for k, v in auc_per_type.items()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
if len(labels) == 2 and not multi_label and positive_label:
|
if len(labels) == 2 and not multi_label and positive_label:
|
||||||
positive_label_f = results[f"{attr}_f_per_type"][positive_label]["f"]
|
positive_label_f = results[f"{attr}_f_per_type"][positive_label]["f"]
|
||||||
|
@ -675,8 +682,7 @@ class Scorer:
|
||||||
|
|
||||||
|
|
||||||
def get_ner_prf(examples: Iterable[Example]) -> Dict[str, Any]:
|
def get_ner_prf(examples: Iterable[Example]) -> Dict[str, Any]:
|
||||||
"""Compute micro-PRF and per-entity PRF scores for a sequence of examples.
|
"""Compute micro-PRF and per-entity PRF scores for a sequence of examples."""
|
||||||
"""
|
|
||||||
score_per_type = defaultdict(PRFScore)
|
score_per_type = defaultdict(PRFScore)
|
||||||
for eg in examples:
|
for eg in examples:
|
||||||
if not eg.y.has_annotation("ENT_IOB"):
|
if not eg.y.has_annotation("ENT_IOB"):
|
||||||
|
|
|
@ -154,10 +154,10 @@ def test_doc_api_serialize(en_tokenizer, text):
|
||||||
|
|
||||||
logger = logging.getLogger("spacy")
|
logger = logging.getLogger("spacy")
|
||||||
with mock.patch.object(logger, "warning") as mock_warning:
|
with mock.patch.object(logger, "warning") as mock_warning:
|
||||||
_ = tokens.to_bytes()
|
_ = tokens.to_bytes() # noqa: F841
|
||||||
mock_warning.assert_not_called()
|
mock_warning.assert_not_called()
|
||||||
tokens.user_hooks["similarity"] = inner_func
|
tokens.user_hooks["similarity"] = inner_func
|
||||||
_ = tokens.to_bytes()
|
_ = tokens.to_bytes() # noqa: F841
|
||||||
mock_warning.assert_called_once()
|
mock_warning.assert_called_once()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ def test_tokenizer_handles_long_text(mk_tokenizer):
|
||||||
(",", False),
|
(",", False),
|
||||||
("милијарда", True),
|
("милијарда", True),
|
||||||
("билион", True),
|
("билион", True),
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
def test_mk_lex_attrs_like_number(mk_tokenizer, word, match):
|
def test_mk_lex_attrs_like_number(mk_tokenizer, word, match):
|
||||||
tokens = mk_tokenizer(word)
|
tokens = mk_tokenizer(word)
|
||||||
|
@ -53,14 +53,7 @@ def test_mk_lex_attrs_like_number(mk_tokenizer, word, match):
|
||||||
assert tokens[0].like_num == match
|
assert tokens[0].like_num == match
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize("word", ["двесте", "два-три", "пет-шест"])
|
||||||
"word",
|
|
||||||
[
|
|
||||||
"двесте",
|
|
||||||
"два-три",
|
|
||||||
"пет-шест"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
def test_mk_lex_attrs_capitals(word):
|
def test_mk_lex_attrs_capitals(word):
|
||||||
assert like_num(word)
|
assert like_num(word)
|
||||||
assert like_num(word.upper())
|
assert like_num(word.upper())
|
||||||
|
@ -77,8 +70,8 @@ def test_mk_lex_attrs_capitals(word):
|
||||||
"петто",
|
"петто",
|
||||||
"стоти",
|
"стоти",
|
||||||
"шеесетите",
|
"шеесетите",
|
||||||
"седумдесетите"
|
"седумдесетите",
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
def test_mk_lex_attrs_like_number_for_ordinal(word):
|
def test_mk_lex_attrs_like_number_for_ordinal(word):
|
||||||
assert like_num(word)
|
assert like_num(word)
|
||||||
|
|
|
@ -21,8 +21,6 @@ ve gevşek bir biçimde birbirine yaklaştırarak 2 cm eninde bir pamuk şeridi
|
||||||
assert len(tokens) == 146
|
assert len(tokens) == 146
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"word",
|
"word",
|
||||||
[
|
[
|
||||||
|
|
|
@ -6,8 +6,14 @@ ABBREV_TESTS = [
|
||||||
("Dr.la görüştüm.", ["Dr.la", "görüştüm", "."]),
|
("Dr.la görüştüm.", ["Dr.la", "görüştüm", "."]),
|
||||||
("Dr.'la görüştüm.", ["Dr.'la", "görüştüm", "."]),
|
("Dr.'la görüştüm.", ["Dr.'la", "görüştüm", "."]),
|
||||||
("TBMM'de çalışıyormuş.", ["TBMM'de", "çalışıyormuş", "."]),
|
("TBMM'de çalışıyormuş.", ["TBMM'de", "çalışıyormuş", "."]),
|
||||||
("Hem İst. hem Ank. bu konuda gayet iyi durumda.", ["Hem", "İst.", "hem", "Ank.", "bu", "konuda", "gayet", "iyi", "durumda", "."]),
|
(
|
||||||
("Hem İst. hem Ank.'da yağış var.", ["Hem", "İst.", "hem", "Ank.'da", "yağış", "var", "."]),
|
"Hem İst. hem Ank. bu konuda gayet iyi durumda.",
|
||||||
|
["Hem", "İst.", "hem", "Ank.", "bu", "konuda", "gayet", "iyi", "durumda", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Hem İst. hem Ank.'da yağış var.",
|
||||||
|
["Hem", "İst.", "hem", "Ank.'da", "yağış", "var", "."],
|
||||||
|
),
|
||||||
("Dr.", ["Dr."]),
|
("Dr.", ["Dr."]),
|
||||||
("Yrd.Doç.", ["Yrd.Doç."]),
|
("Yrd.Doç.", ["Yrd.Doç."]),
|
||||||
("Prof.'un", ["Prof.'un"]),
|
("Prof.'un", ["Prof.'un"]),
|
||||||
|
@ -15,21 +21,55 @@ ABBREV_TESTS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
URL_TESTS = [
|
URL_TESTS = [
|
||||||
("Bizler de www.duygu.com.tr adında bir websitesi kurduk.", ["Bizler", "de", "www.duygu.com.tr", "adında", "bir", "websitesi", "kurduk", "."]),
|
(
|
||||||
("Bizler de https://www.duygu.com.tr adında bir websitesi kurduk.", ["Bizler", "de", "https://www.duygu.com.tr", "adında", "bir", "websitesi", "kurduk", "."]),
|
"Bizler de www.duygu.com.tr adında bir websitesi kurduk.",
|
||||||
("Bizler de www.duygu.com.tr'dan satın aldık.", ["Bizler", "de", "www.duygu.com.tr'dan", "satın", "aldık", "."]),
|
[
|
||||||
("Bizler de https://www.duygu.com.tr'dan satın aldık.", ["Bizler", "de", "https://www.duygu.com.tr'dan", "satın", "aldık", "."]),
|
"Bizler",
|
||||||
|
"de",
|
||||||
|
"www.duygu.com.tr",
|
||||||
|
"adında",
|
||||||
|
"bir",
|
||||||
|
"websitesi",
|
||||||
|
"kurduk",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Bizler de https://www.duygu.com.tr adında bir websitesi kurduk.",
|
||||||
|
[
|
||||||
|
"Bizler",
|
||||||
|
"de",
|
||||||
|
"https://www.duygu.com.tr",
|
||||||
|
"adında",
|
||||||
|
"bir",
|
||||||
|
"websitesi",
|
||||||
|
"kurduk",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Bizler de www.duygu.com.tr'dan satın aldık.",
|
||||||
|
["Bizler", "de", "www.duygu.com.tr'dan", "satın", "aldık", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Bizler de https://www.duygu.com.tr'dan satın aldık.",
|
||||||
|
["Bizler", "de", "https://www.duygu.com.tr'dan", "satın", "aldık", "."],
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NUMBER_TESTS = [
|
NUMBER_TESTS = [
|
||||||
("Rakamla 6 yazılıydı.", ["Rakamla", "6", "yazılıydı", "."]),
|
("Rakamla 6 yazılıydı.", ["Rakamla", "6", "yazılıydı", "."]),
|
||||||
("Hava -4 dereceydi.", ["Hava", "-4", "dereceydi", "."]),
|
("Hava -4 dereceydi.", ["Hava", "-4", "dereceydi", "."]),
|
||||||
("Hava sıcaklığı -4ten +6ya yükseldi.", ["Hava", "sıcaklığı", "-4ten", "+6ya", "yükseldi", "."]),
|
(
|
||||||
("Hava sıcaklığı -4'ten +6'ya yükseldi.", ["Hava", "sıcaklığı", "-4'ten", "+6'ya", "yükseldi", "."]),
|
"Hava sıcaklığı -4ten +6ya yükseldi.",
|
||||||
|
["Hava", "sıcaklığı", "-4ten", "+6ya", "yükseldi", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Hava sıcaklığı -4'ten +6'ya yükseldi.",
|
||||||
|
["Hava", "sıcaklığı", "-4'ten", "+6'ya", "yükseldi", "."],
|
||||||
|
),
|
||||||
("Yarışta 6. oldum.", ["Yarışta", "6.", "oldum", "."]),
|
("Yarışta 6. oldum.", ["Yarışta", "6.", "oldum", "."]),
|
||||||
("Yarışta 438547745. oldum.", ["Yarışta", "438547745.", "oldum", "."]),
|
("Yarışta 438547745. oldum.", ["Yarışta", "438547745.", "oldum", "."]),
|
||||||
("Kitap IV. Murat hakkında.", ["Kitap", "IV.", "Murat", "hakkında", "."]),
|
("Kitap IV. Murat hakkında.", ["Kitap", "IV.", "Murat", "hakkında", "."]),
|
||||||
|
@ -55,22 +95,103 @@ NUMBER_TESTS = [
|
||||||
("VI.dan", ["VI.dan"]),
|
("VI.dan", ["VI.dan"]),
|
||||||
("Hepsi 1994 yılında oldu.", ["Hepsi", "1994", "yılında", "oldu", "."]),
|
("Hepsi 1994 yılında oldu.", ["Hepsi", "1994", "yılında", "oldu", "."]),
|
||||||
("Hepsi 1994'te oldu.", ["Hepsi", "1994'te", "oldu", "."]),
|
("Hepsi 1994'te oldu.", ["Hepsi", "1994'te", "oldu", "."]),
|
||||||
("2/3 tarihli faturayı bulamadım.", ["2/3", "tarihli", "faturayı", "bulamadım", "."]),
|
(
|
||||||
("2.3 tarihli faturayı bulamadım.", ["2.3", "tarihli", "faturayı", "bulamadım", "."]),
|
"2/3 tarihli faturayı bulamadım.",
|
||||||
("2.3. tarihli faturayı bulamadım.", ["2.3.", "tarihli", "faturayı", "bulamadım", "."]),
|
["2/3", "tarihli", "faturayı", "bulamadım", "."],
|
||||||
("2/3/2020 tarihli faturayı bulamadm.", ["2/3/2020", "tarihli", "faturayı", "bulamadm", "."]),
|
),
|
||||||
("2/3/1987 tarihinden beri burda yaşıyorum.", ["2/3/1987", "tarihinden", "beri", "burda", "yaşıyorum", "."]),
|
(
|
||||||
("2-3-1987 tarihinden beri burdayım.", ["2-3-1987", "tarihinden", "beri", "burdayım", "."]),
|
"2.3 tarihli faturayı bulamadım.",
|
||||||
("2.3.1987 tarihinden beri burdayım.", ["2.3.1987", "tarihinden", "beri", "burdayım", "."]),
|
["2.3", "tarihli", "faturayı", "bulamadım", "."],
|
||||||
("Bu olay 2005-2006 tarihleri arasında oldu.", ["Bu", "olay", "2005", "-", "2006", "tarihleri", "arasında", "oldu", "."]),
|
),
|
||||||
("Bu olay 4/12/2005-21/3/2006 tarihleri arasında oldu.", ["Bu", "olay", "4/12/2005", "-", "21/3/2006", "tarihleri", "arasında", "oldu", ".",]),
|
(
|
||||||
("Ek fıkra: 5/11/2003-4999/3 maddesine göre uygundur.", ["Ek", "fıkra", ":", "5/11/2003", "-", "4999/3", "maddesine", "göre", "uygundur", "."]),
|
"2.3. tarihli faturayı bulamadım.",
|
||||||
("2/A alanları: 6831 sayılı Kanunun 2nci maddesinin birinci fıkrasının (A) bendine göre", ["2/A", "alanları", ":", "6831", "sayılı", "Kanunun", "2nci", "maddesinin", "birinci", "fıkrasının", "(", "A", ")", "bendine", "göre"]),
|
["2.3.", "tarihli", "faturayı", "bulamadım", "."],
|
||||||
("ŞEHİTTEĞMENKALMAZ Cad. No: 2/311", ["ŞEHİTTEĞMENKALMAZ", "Cad.", "No", ":", "2/311"]),
|
),
|
||||||
("2-3-2025", ["2-3-2025",]),
|
(
|
||||||
|
"2/3/2020 tarihli faturayı bulamadm.",
|
||||||
|
["2/3/2020", "tarihli", "faturayı", "bulamadm", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"2/3/1987 tarihinden beri burda yaşıyorum.",
|
||||||
|
["2/3/1987", "tarihinden", "beri", "burda", "yaşıyorum", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"2-3-1987 tarihinden beri burdayım.",
|
||||||
|
["2-3-1987", "tarihinden", "beri", "burdayım", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"2.3.1987 tarihinden beri burdayım.",
|
||||||
|
["2.3.1987", "tarihinden", "beri", "burdayım", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Bu olay 2005-2006 tarihleri arasında oldu.",
|
||||||
|
["Bu", "olay", "2005", "-", "2006", "tarihleri", "arasında", "oldu", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Bu olay 4/12/2005-21/3/2006 tarihleri arasında oldu.",
|
||||||
|
[
|
||||||
|
"Bu",
|
||||||
|
"olay",
|
||||||
|
"4/12/2005",
|
||||||
|
"-",
|
||||||
|
"21/3/2006",
|
||||||
|
"tarihleri",
|
||||||
|
"arasında",
|
||||||
|
"oldu",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ek fıkra: 5/11/2003-4999/3 maddesine göre uygundur.",
|
||||||
|
[
|
||||||
|
"Ek",
|
||||||
|
"fıkra",
|
||||||
|
":",
|
||||||
|
"5/11/2003",
|
||||||
|
"-",
|
||||||
|
"4999/3",
|
||||||
|
"maddesine",
|
||||||
|
"göre",
|
||||||
|
"uygundur",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"2/A alanları: 6831 sayılı Kanunun 2nci maddesinin birinci fıkrasının (A) bendine göre",
|
||||||
|
[
|
||||||
|
"2/A",
|
||||||
|
"alanları",
|
||||||
|
":",
|
||||||
|
"6831",
|
||||||
|
"sayılı",
|
||||||
|
"Kanunun",
|
||||||
|
"2nci",
|
||||||
|
"maddesinin",
|
||||||
|
"birinci",
|
||||||
|
"fıkrasının",
|
||||||
|
"(",
|
||||||
|
"A",
|
||||||
|
")",
|
||||||
|
"bendine",
|
||||||
|
"göre",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"ŞEHİTTEĞMENKALMAZ Cad. No: 2/311",
|
||||||
|
["ŞEHİTTEĞMENKALMAZ", "Cad.", "No", ":", "2/311"],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"2-3-2025",
|
||||||
|
[
|
||||||
|
"2-3-2025",
|
||||||
|
],
|
||||||
|
),
|
||||||
("2/3/2025", ["2/3/2025"]),
|
("2/3/2025", ["2/3/2025"]),
|
||||||
("Yıllardır 0.5 uç kullanıyorum.", ["Yıllardır", "0.5", "uç", "kullanıyorum", "."]),
|
("Yıllardır 0.5 uç kullanıyorum.", ["Yıllardır", "0.5", "uç", "kullanıyorum", "."]),
|
||||||
("Kan değerlerim 0.5-0.7 arasıydı.", ["Kan", "değerlerim", "0.5", "-", "0.7", "arasıydı", "."]),
|
(
|
||||||
|
"Kan değerlerim 0.5-0.7 arasıydı.",
|
||||||
|
["Kan", "değerlerim", "0.5", "-", "0.7", "arasıydı", "."],
|
||||||
|
),
|
||||||
("0.5", ["0.5"]),
|
("0.5", ["0.5"]),
|
||||||
("1/2", ["1/2"]),
|
("1/2", ["1/2"]),
|
||||||
("%1", ["%", "1"]),
|
("%1", ["%", "1"]),
|
||||||
|
@ -80,10 +201,19 @@ NUMBER_TESTS = [
|
||||||
("%1'lik dilim", ["%", "1'lik", "dilim"]),
|
("%1'lik dilim", ["%", "1'lik", "dilim"]),
|
||||||
("%1.5", ["%", "1.5"]),
|
("%1.5", ["%", "1.5"]),
|
||||||
# ("%1-%2 arası büyüme bekleniyor.", ["%", "1", "-", "%", "2", "arası", "büyüme", "bekleniyor", "."]),
|
# ("%1-%2 arası büyüme bekleniyor.", ["%", "1", "-", "%", "2", "arası", "büyüme", "bekleniyor", "."]),
|
||||||
("%1-2 arası büyüme bekliyoruz.", ["%", "1", "-", "2", "arası", "büyüme", "bekliyoruz", "."]),
|
(
|
||||||
("%11-12 arası büyüme bekliyoruz.", ["%", "11", "-", "12", "arası", "büyüme", "bekliyoruz", "."]),
|
"%1-2 arası büyüme bekliyoruz.",
|
||||||
|
["%", "1", "-", "2", "arası", "büyüme", "bekliyoruz", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"%11-12 arası büyüme bekliyoruz.",
|
||||||
|
["%", "11", "-", "12", "arası", "büyüme", "bekliyoruz", "."],
|
||||||
|
),
|
||||||
("%1.5luk büyüme bekliyoruz.", ["%", "1.5luk", "büyüme", "bekliyoruz", "."]),
|
("%1.5luk büyüme bekliyoruz.", ["%", "1.5luk", "büyüme", "bekliyoruz", "."]),
|
||||||
("Saat 1-2 arası gelin lütfen.", ["Saat", "1", "-", "2", "arası", "gelin", "lütfen", "."]),
|
(
|
||||||
|
"Saat 1-2 arası gelin lütfen.",
|
||||||
|
["Saat", "1", "-", "2", "arası", "gelin", "lütfen", "."],
|
||||||
|
),
|
||||||
("Saat 15:30 gibi buluşalım.", ["Saat", "15:30", "gibi", "buluşalım", "."]),
|
("Saat 15:30 gibi buluşalım.", ["Saat", "15:30", "gibi", "buluşalım", "."]),
|
||||||
("Saat 15:30'da buluşalım.", ["Saat", "15:30'da", "buluşalım", "."]),
|
("Saat 15:30'da buluşalım.", ["Saat", "15:30'da", "buluşalım", "."]),
|
||||||
("Saat 15.30'da buluşalım.", ["Saat", "15.30'da", "buluşalım", "."]),
|
("Saat 15.30'da buluşalım.", ["Saat", "15.30'da", "buluşalım", "."]),
|
||||||
|
@ -94,9 +224,74 @@ NUMBER_TESTS = [
|
||||||
("Okulumuz 3/B şubesi", ["Okulumuz", "3/B", "şubesi"]),
|
("Okulumuz 3/B şubesi", ["Okulumuz", "3/B", "şubesi"]),
|
||||||
("Okulumuz 3B şubesi", ["Okulumuz", "3B", "şubesi"]),
|
("Okulumuz 3B şubesi", ["Okulumuz", "3B", "şubesi"]),
|
||||||
("Okulumuz 3b şubesi", ["Okulumuz", "3b", "şubesi"]),
|
("Okulumuz 3b şubesi", ["Okulumuz", "3b", "şubesi"]),
|
||||||
("Antonio Gaudí 20. yüzyılda, 1904-1914 yılları arasında on yıl süren bir reform süreci getirmiştir.", ["Antonio", "Gaudí", "20.", "yüzyılda", ",", "1904", "-", "1914", "yılları", "arasında", "on", "yıl", "süren", "bir", "reform", "süreci", "getirmiştir", "."]),
|
(
|
||||||
("Dizel yakıtın avro bölgesi ortalaması olan 1,165 avroya kıyasla litre başına 1,335 avroya mal olduğunu gösteriyor.", ["Dizel", "yakıtın", "avro", "bölgesi", "ortalaması", "olan", "1,165", "avroya", "kıyasla", "litre", "başına", "1,335", "avroya", "mal", "olduğunu", "gösteriyor", "."]),
|
"Antonio Gaudí 20. yüzyılda, 1904-1914 yılları arasında on yıl süren bir reform süreci getirmiştir.",
|
||||||
("Marcus Antonius M.Ö. 1 Ocak 49'da, Sezar'dan Vali'nin kendisini barış dostu ilan ettiği bir bildiri yayınlamıştır.", ["Marcus", "Antonius", "M.Ö.", "1", "Ocak", "49'da", ",", "Sezar'dan", "Vali'nin", "kendisini", "barış", "dostu", "ilan", "ettiği", "bir", "bildiri", "yayınlamıştır", "."])
|
[
|
||||||
|
"Antonio",
|
||||||
|
"Gaudí",
|
||||||
|
"20.",
|
||||||
|
"yüzyılda",
|
||||||
|
",",
|
||||||
|
"1904",
|
||||||
|
"-",
|
||||||
|
"1914",
|
||||||
|
"yılları",
|
||||||
|
"arasında",
|
||||||
|
"on",
|
||||||
|
"yıl",
|
||||||
|
"süren",
|
||||||
|
"bir",
|
||||||
|
"reform",
|
||||||
|
"süreci",
|
||||||
|
"getirmiştir",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Dizel yakıtın avro bölgesi ortalaması olan 1,165 avroya kıyasla litre başına 1,335 avroya mal olduğunu gösteriyor.",
|
||||||
|
[
|
||||||
|
"Dizel",
|
||||||
|
"yakıtın",
|
||||||
|
"avro",
|
||||||
|
"bölgesi",
|
||||||
|
"ortalaması",
|
||||||
|
"olan",
|
||||||
|
"1,165",
|
||||||
|
"avroya",
|
||||||
|
"kıyasla",
|
||||||
|
"litre",
|
||||||
|
"başına",
|
||||||
|
"1,335",
|
||||||
|
"avroya",
|
||||||
|
"mal",
|
||||||
|
"olduğunu",
|
||||||
|
"gösteriyor",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Marcus Antonius M.Ö. 1 Ocak 49'da, Sezar'dan Vali'nin kendisini barış dostu ilan ettiği bir bildiri yayınlamıştır.",
|
||||||
|
[
|
||||||
|
"Marcus",
|
||||||
|
"Antonius",
|
||||||
|
"M.Ö.",
|
||||||
|
"1",
|
||||||
|
"Ocak",
|
||||||
|
"49'da",
|
||||||
|
",",
|
||||||
|
"Sezar'dan",
|
||||||
|
"Vali'nin",
|
||||||
|
"kendisini",
|
||||||
|
"barış",
|
||||||
|
"dostu",
|
||||||
|
"ilan",
|
||||||
|
"ettiği",
|
||||||
|
"bir",
|
||||||
|
"bildiri",
|
||||||
|
"yayınlamıştır",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -106,41 +301,393 @@ PUNCT_TESTS = [
|
||||||
("Gitsek mi?", ["Gitsek", "mi", "?"]),
|
("Gitsek mi?", ["Gitsek", "mi", "?"]),
|
||||||
("Gitsek mi??", ["Gitsek", "mi", "?", "?"]),
|
("Gitsek mi??", ["Gitsek", "mi", "?", "?"]),
|
||||||
("Gitsek mi?!?", ["Gitsek", "mi", "?", "!", "?"]),
|
("Gitsek mi?!?", ["Gitsek", "mi", "?", "!", "?"]),
|
||||||
("Ankara - Antalya arası otobüs işliyor.", ["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."]),
|
(
|
||||||
("Ankara-Antalya arası otobüs işliyor.", ["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."]),
|
"Ankara - Antalya arası otobüs işliyor.",
|
||||||
|
["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ankara-Antalya arası otobüs işliyor.",
|
||||||
|
["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."],
|
||||||
|
),
|
||||||
("Sen--ben, ya da onlar.", ["Sen", "--", "ben", ",", "ya", "da", "onlar", "."]),
|
("Sen--ben, ya da onlar.", ["Sen", "--", "ben", ",", "ya", "da", "onlar", "."]),
|
||||||
("Senden, benden, bizden şarkısını biliyor musun?", ["Senden", ",", "benden", ",", "bizden", "şarkısını", "biliyor", "musun", "?"]),
|
(
|
||||||
("Akif'le geldik, sonra da o ayrıldı.", ["Akif'le", "geldik", ",", "sonra", "da", "o", "ayrıldı", "."]),
|
"Senden, benden, bizden şarkısını biliyor musun?",
|
||||||
|
["Senden", ",", "benden", ",", "bizden", "şarkısını", "biliyor", "musun", "?"],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Akif'le geldik, sonra da o ayrıldı.",
|
||||||
|
["Akif'le", "geldik", ",", "sonra", "da", "o", "ayrıldı", "."],
|
||||||
|
),
|
||||||
("Bu adam ne dedi şimdi???", ["Bu", "adam", "ne", "dedi", "şimdi", "?", "?", "?"]),
|
("Bu adam ne dedi şimdi???", ["Bu", "adam", "ne", "dedi", "şimdi", "?", "?", "?"]),
|
||||||
("Yok hasta olmuş, yok annesi hastaymış, bahaneler işte...", ["Yok", "hasta", "olmuş", ",", "yok", "annesi", "hastaymış", ",", "bahaneler", "işte", "..."]),
|
(
|
||||||
("Ankara'dan İstanbul'a ... bir aşk hikayesi.", ["Ankara'dan", "İstanbul'a", "...", "bir", "aşk", "hikayesi", "."]),
|
"Yok hasta olmuş, yok annesi hastaymış, bahaneler işte...",
|
||||||
|
[
|
||||||
|
"Yok",
|
||||||
|
"hasta",
|
||||||
|
"olmuş",
|
||||||
|
",",
|
||||||
|
"yok",
|
||||||
|
"annesi",
|
||||||
|
"hastaymış",
|
||||||
|
",",
|
||||||
|
"bahaneler",
|
||||||
|
"işte",
|
||||||
|
"...",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ankara'dan İstanbul'a ... bir aşk hikayesi.",
|
||||||
|
["Ankara'dan", "İstanbul'a", "...", "bir", "aşk", "hikayesi", "."],
|
||||||
|
),
|
||||||
("Ahmet'te", ["Ahmet'te"]),
|
("Ahmet'te", ["Ahmet'te"]),
|
||||||
("İstanbul'da", ["İstanbul'da"]),
|
("İstanbul'da", ["İstanbul'da"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
GENERAL_TESTS = [
|
GENERAL_TESTS = [
|
||||||
("1914'teki Endurance seferinde, Sir Ernest Shackleton'ın kaptanlığını yaptığı İngiliz Endurance gemisi yirmi sekiz kişi ile Antarktika'yı geçmek üzere yelken açtı.", ["1914'teki", "Endurance", "seferinde", ",", "Sir", "Ernest", "Shackleton'ın", "kaptanlığını", "yaptığı", "İngiliz", "Endurance", "gemisi", "yirmi", "sekiz", "kişi", "ile", "Antarktika'yı", "geçmek", "üzere", "yelken", "açtı", "."]),
|
(
|
||||||
("Danışılan \"%100 Cospedal\" olduğunu belirtti.", ["Danışılan", '"', "%", "100", "Cospedal", '"', "olduğunu", "belirtti", "."]),
|
"1914'teki Endurance seferinde, Sir Ernest Shackleton'ın kaptanlığını yaptığı İngiliz Endurance gemisi yirmi sekiz kişi ile Antarktika'yı geçmek üzere yelken açtı.",
|
||||||
("1976'da parkur artık kullanılmıyordu; 1990'da ise bir yangın, daha sonraları ahırlarla birlikte yıkılacak olan tahta tribünlerden geri kalanları da yok etmişti.", ["1976'da", "parkur", "artık", "kullanılmıyordu", ";", "1990'da", "ise", "bir", "yangın", ",", "daha", "sonraları", "ahırlarla", "birlikte", "yıkılacak", "olan", "tahta", "tribünlerden", "geri", "kalanları", "da", "yok", "etmişti", "."]),
|
[
|
||||||
("Dahiyane bir ameliyat ve zorlu bir rehabilitasyon sürecinden sonra, tamamen iyileştim.", ["Dahiyane", "bir", "ameliyat", "ve", "zorlu", "bir", "rehabilitasyon", "sürecinden", "sonra", ",", "tamamen", "iyileştim", "."]),
|
"1914'teki",
|
||||||
("Yaklaşık iki hafta süren bireysel erken oy kullanma döneminin ardından 5,7 milyondan fazla Floridalı sandık başına gitti.", ["Yaklaşık", "iki", "hafta", "süren", "bireysel", "erken", "oy", "kullanma", "döneminin", "ardından", "5,7", "milyondan", "fazla", "Floridalı", "sandık", "başına", "gitti", "."]),
|
"Endurance",
|
||||||
("Ancak, bu ABD Çevre Koruma Ajansı'nın dünyayı bu konularda uyarmasının ardından ortaya çıktı.", ["Ancak", ",", "bu", "ABD", "Çevre", "Koruma", "Ajansı'nın", "dünyayı", "bu", "konularda", "uyarmasının", "ardından", "ortaya", "çıktı", "."]),
|
"seferinde",
|
||||||
("Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.", ["Ortalama", "şansa", "ve", "10.000", "Sterlin", "değerinde", "tahvillere", "sahip", "bir", "yatırımcı", "yılda", "125", "Sterlin", "ikramiye", "kazanabilir", "."]),
|
",",
|
||||||
("Granit adaları; Seyşeller ve Tioman ile Saint Helena gibi volkanik adaları kapsar." , ["Granit", "adaları", ";", "Seyşeller", "ve", "Tioman", "ile", "Saint", "Helena", "gibi", "volkanik", "adaları", "kapsar", "."]),
|
"Sir",
|
||||||
("Barış antlaşmasıyla İspanya, Amerika'ya Porto Riko, Guam ve Filipinler kolonilerini devretti.", ["Barış", "antlaşmasıyla", "İspanya", ",", "Amerika'ya", "Porto", "Riko", ",", "Guam", "ve", "Filipinler", "kolonilerini", "devretti", "."]),
|
"Ernest",
|
||||||
("Makedonya\'nın sınır bölgelerini güvence altına alan Philip, büyük bir Makedon ordusu kurdu ve uzun bir fetih seferi için Trakya\'ya doğru yürüdü.", ["Makedonya\'nın", "sınır", "bölgelerini", "güvence", "altına", "alan", "Philip", ",", "büyük", "bir", "Makedon", "ordusu", "kurdu", "ve", "uzun", "bir", "fetih", "seferi", "için", "Trakya\'ya", "doğru", "yürüdü", "."]),
|
"Shackleton'ın",
|
||||||
("Fransız gazetesi Le Figaro'ya göre bu hükumet planı sayesinde 42 milyon Euro kazanç sağlanabilir ve elde edilen paranın 15.5 milyonu ulusal güvenlik için kullanılabilir.", ["Fransız", "gazetesi", "Le", "Figaro'ya", "göre", "bu", "hükumet", "planı", "sayesinde", "42", "milyon", "Euro", "kazanç", "sağlanabilir", "ve", "elde", "edilen", "paranın", "15.5", "milyonu", "ulusal", "güvenlik", "için", "kullanılabilir", "."]),
|
"kaptanlığını",
|
||||||
("Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.", ["Ortalama", "şansa", "ve", "10.000", "Sterlin", "değerinde", "tahvillere", "sahip", "bir", "yatırımcı", "yılda", "125", "Sterlin", "ikramiye", "kazanabilir", "."]),
|
"yaptığı",
|
||||||
("3 Kasım Salı günü, Ankara Belediye Başkanı 2014'te hükümetle birlikte oluşturulan kentsel gelişim anlaşmasını askıya alma kararı verdi.", ["3", "Kasım", "Salı", "günü", ",", "Ankara", "Belediye", "Başkanı", "2014'te", "hükümetle", "birlikte", "oluşturulan", "kentsel", "gelişim", "anlaşmasını", "askıya", "alma", "kararı", "verdi", "."]),
|
"İngiliz",
|
||||||
("Stalin, Abakumov'u Beria'nın enerji bakanlıkları üzerindeki baskınlığına karşı MGB içinde kendi ağını kurmaya teşvik etmeye başlamıştı.", ["Stalin", ",", "Abakumov'u", "Beria'nın", "enerji", "bakanlıkları", "üzerindeki", "baskınlığına", "karşı", "MGB", "içinde", "kendi", "ağını", "kurmaya", "teşvik", "etmeye", "başlamıştı", "."]),
|
"Endurance",
|
||||||
("Güney Avrupa'daki kazı alanlarının çoğunluğu gibi, bu bulgu M.Ö. 5. yüzyılın başlar", ["Güney", "Avrupa'daki", "kazı", "alanlarının", "çoğunluğu", "gibi", ",", "bu", "bulgu", "M.Ö.", "5.", "yüzyılın", "başlar"]),
|
"gemisi",
|
||||||
("Sağlığın bozulması Hitchcock hayatının son yirmi yılında üretimini azalttı.", ["Sağlığın", "bozulması", "Hitchcock", "hayatının", "son", "yirmi", "yılında", "üretimini", "azalttı", "."]),
|
"yirmi",
|
||||||
|
"sekiz",
|
||||||
|
"kişi",
|
||||||
|
"ile",
|
||||||
|
"Antarktika'yı",
|
||||||
|
"geçmek",
|
||||||
|
"üzere",
|
||||||
|
"yelken",
|
||||||
|
"açtı",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'Danışılan "%100 Cospedal" olduğunu belirtti.',
|
||||||
|
["Danışılan", '"', "%", "100", "Cospedal", '"', "olduğunu", "belirtti", "."],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"1976'da parkur artık kullanılmıyordu; 1990'da ise bir yangın, daha sonraları ahırlarla birlikte yıkılacak olan tahta tribünlerden geri kalanları da yok etmişti.",
|
||||||
|
[
|
||||||
|
"1976'da",
|
||||||
|
"parkur",
|
||||||
|
"artık",
|
||||||
|
"kullanılmıyordu",
|
||||||
|
";",
|
||||||
|
"1990'da",
|
||||||
|
"ise",
|
||||||
|
"bir",
|
||||||
|
"yangın",
|
||||||
|
",",
|
||||||
|
"daha",
|
||||||
|
"sonraları",
|
||||||
|
"ahırlarla",
|
||||||
|
"birlikte",
|
||||||
|
"yıkılacak",
|
||||||
|
"olan",
|
||||||
|
"tahta",
|
||||||
|
"tribünlerden",
|
||||||
|
"geri",
|
||||||
|
"kalanları",
|
||||||
|
"da",
|
||||||
|
"yok",
|
||||||
|
"etmişti",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Dahiyane bir ameliyat ve zorlu bir rehabilitasyon sürecinden sonra, tamamen iyileştim.",
|
||||||
|
[
|
||||||
|
"Dahiyane",
|
||||||
|
"bir",
|
||||||
|
"ameliyat",
|
||||||
|
"ve",
|
||||||
|
"zorlu",
|
||||||
|
"bir",
|
||||||
|
"rehabilitasyon",
|
||||||
|
"sürecinden",
|
||||||
|
"sonra",
|
||||||
|
",",
|
||||||
|
"tamamen",
|
||||||
|
"iyileştim",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Yaklaşık iki hafta süren bireysel erken oy kullanma döneminin ardından 5,7 milyondan fazla Floridalı sandık başına gitti.",
|
||||||
|
[
|
||||||
|
"Yaklaşık",
|
||||||
|
"iki",
|
||||||
|
"hafta",
|
||||||
|
"süren",
|
||||||
|
"bireysel",
|
||||||
|
"erken",
|
||||||
|
"oy",
|
||||||
|
"kullanma",
|
||||||
|
"döneminin",
|
||||||
|
"ardından",
|
||||||
|
"5,7",
|
||||||
|
"milyondan",
|
||||||
|
"fazla",
|
||||||
|
"Floridalı",
|
||||||
|
"sandık",
|
||||||
|
"başına",
|
||||||
|
"gitti",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ancak, bu ABD Çevre Koruma Ajansı'nın dünyayı bu konularda uyarmasının ardından ortaya çıktı.",
|
||||||
|
[
|
||||||
|
"Ancak",
|
||||||
|
",",
|
||||||
|
"bu",
|
||||||
|
"ABD",
|
||||||
|
"Çevre",
|
||||||
|
"Koruma",
|
||||||
|
"Ajansı'nın",
|
||||||
|
"dünyayı",
|
||||||
|
"bu",
|
||||||
|
"konularda",
|
||||||
|
"uyarmasının",
|
||||||
|
"ardından",
|
||||||
|
"ortaya",
|
||||||
|
"çıktı",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.",
|
||||||
|
[
|
||||||
|
"Ortalama",
|
||||||
|
"şansa",
|
||||||
|
"ve",
|
||||||
|
"10.000",
|
||||||
|
"Sterlin",
|
||||||
|
"değerinde",
|
||||||
|
"tahvillere",
|
||||||
|
"sahip",
|
||||||
|
"bir",
|
||||||
|
"yatırımcı",
|
||||||
|
"yılda",
|
||||||
|
"125",
|
||||||
|
"Sterlin",
|
||||||
|
"ikramiye",
|
||||||
|
"kazanabilir",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Granit adaları; Seyşeller ve Tioman ile Saint Helena gibi volkanik adaları kapsar.",
|
||||||
|
[
|
||||||
|
"Granit",
|
||||||
|
"adaları",
|
||||||
|
";",
|
||||||
|
"Seyşeller",
|
||||||
|
"ve",
|
||||||
|
"Tioman",
|
||||||
|
"ile",
|
||||||
|
"Saint",
|
||||||
|
"Helena",
|
||||||
|
"gibi",
|
||||||
|
"volkanik",
|
||||||
|
"adaları",
|
||||||
|
"kapsar",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Barış antlaşmasıyla İspanya, Amerika'ya Porto Riko, Guam ve Filipinler kolonilerini devretti.",
|
||||||
|
[
|
||||||
|
"Barış",
|
||||||
|
"antlaşmasıyla",
|
||||||
|
"İspanya",
|
||||||
|
",",
|
||||||
|
"Amerika'ya",
|
||||||
|
"Porto",
|
||||||
|
"Riko",
|
||||||
|
",",
|
||||||
|
"Guam",
|
||||||
|
"ve",
|
||||||
|
"Filipinler",
|
||||||
|
"kolonilerini",
|
||||||
|
"devretti",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Makedonya'nın sınır bölgelerini güvence altına alan Philip, büyük bir Makedon ordusu kurdu ve uzun bir fetih seferi için Trakya'ya doğru yürüdü.",
|
||||||
|
[
|
||||||
|
"Makedonya'nın",
|
||||||
|
"sınır",
|
||||||
|
"bölgelerini",
|
||||||
|
"güvence",
|
||||||
|
"altına",
|
||||||
|
"alan",
|
||||||
|
"Philip",
|
||||||
|
",",
|
||||||
|
"büyük",
|
||||||
|
"bir",
|
||||||
|
"Makedon",
|
||||||
|
"ordusu",
|
||||||
|
"kurdu",
|
||||||
|
"ve",
|
||||||
|
"uzun",
|
||||||
|
"bir",
|
||||||
|
"fetih",
|
||||||
|
"seferi",
|
||||||
|
"için",
|
||||||
|
"Trakya'ya",
|
||||||
|
"doğru",
|
||||||
|
"yürüdü",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Fransız gazetesi Le Figaro'ya göre bu hükumet planı sayesinde 42 milyon Euro kazanç sağlanabilir ve elde edilen paranın 15.5 milyonu ulusal güvenlik için kullanılabilir.",
|
||||||
|
[
|
||||||
|
"Fransız",
|
||||||
|
"gazetesi",
|
||||||
|
"Le",
|
||||||
|
"Figaro'ya",
|
||||||
|
"göre",
|
||||||
|
"bu",
|
||||||
|
"hükumet",
|
||||||
|
"planı",
|
||||||
|
"sayesinde",
|
||||||
|
"42",
|
||||||
|
"milyon",
|
||||||
|
"Euro",
|
||||||
|
"kazanç",
|
||||||
|
"sağlanabilir",
|
||||||
|
"ve",
|
||||||
|
"elde",
|
||||||
|
"edilen",
|
||||||
|
"paranın",
|
||||||
|
"15.5",
|
||||||
|
"milyonu",
|
||||||
|
"ulusal",
|
||||||
|
"güvenlik",
|
||||||
|
"için",
|
||||||
|
"kullanılabilir",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.",
|
||||||
|
[
|
||||||
|
"Ortalama",
|
||||||
|
"şansa",
|
||||||
|
"ve",
|
||||||
|
"10.000",
|
||||||
|
"Sterlin",
|
||||||
|
"değerinde",
|
||||||
|
"tahvillere",
|
||||||
|
"sahip",
|
||||||
|
"bir",
|
||||||
|
"yatırımcı",
|
||||||
|
"yılda",
|
||||||
|
"125",
|
||||||
|
"Sterlin",
|
||||||
|
"ikramiye",
|
||||||
|
"kazanabilir",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"3 Kasım Salı günü, Ankara Belediye Başkanı 2014'te hükümetle birlikte oluşturulan kentsel gelişim anlaşmasını askıya alma kararı verdi.",
|
||||||
|
[
|
||||||
|
"3",
|
||||||
|
"Kasım",
|
||||||
|
"Salı",
|
||||||
|
"günü",
|
||||||
|
",",
|
||||||
|
"Ankara",
|
||||||
|
"Belediye",
|
||||||
|
"Başkanı",
|
||||||
|
"2014'te",
|
||||||
|
"hükümetle",
|
||||||
|
"birlikte",
|
||||||
|
"oluşturulan",
|
||||||
|
"kentsel",
|
||||||
|
"gelişim",
|
||||||
|
"anlaşmasını",
|
||||||
|
"askıya",
|
||||||
|
"alma",
|
||||||
|
"kararı",
|
||||||
|
"verdi",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Stalin, Abakumov'u Beria'nın enerji bakanlıkları üzerindeki baskınlığına karşı MGB içinde kendi ağını kurmaya teşvik etmeye başlamıştı.",
|
||||||
|
[
|
||||||
|
"Stalin",
|
||||||
|
",",
|
||||||
|
"Abakumov'u",
|
||||||
|
"Beria'nın",
|
||||||
|
"enerji",
|
||||||
|
"bakanlıkları",
|
||||||
|
"üzerindeki",
|
||||||
|
"baskınlığına",
|
||||||
|
"karşı",
|
||||||
|
"MGB",
|
||||||
|
"içinde",
|
||||||
|
"kendi",
|
||||||
|
"ağını",
|
||||||
|
"kurmaya",
|
||||||
|
"teşvik",
|
||||||
|
"etmeye",
|
||||||
|
"başlamıştı",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Güney Avrupa'daki kazı alanlarının çoğunluğu gibi, bu bulgu M.Ö. 5. yüzyılın başlar",
|
||||||
|
[
|
||||||
|
"Güney",
|
||||||
|
"Avrupa'daki",
|
||||||
|
"kazı",
|
||||||
|
"alanlarının",
|
||||||
|
"çoğunluğu",
|
||||||
|
"gibi",
|
||||||
|
",",
|
||||||
|
"bu",
|
||||||
|
"bulgu",
|
||||||
|
"M.Ö.",
|
||||||
|
"5.",
|
||||||
|
"yüzyılın",
|
||||||
|
"başlar",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Sağlığın bozulması Hitchcock hayatının son yirmi yılında üretimini azalttı.",
|
||||||
|
[
|
||||||
|
"Sağlığın",
|
||||||
|
"bozulması",
|
||||||
|
"Hitchcock",
|
||||||
|
"hayatının",
|
||||||
|
"son",
|
||||||
|
"yirmi",
|
||||||
|
"yılında",
|
||||||
|
"üretimini",
|
||||||
|
"azalttı",
|
||||||
|
".",
|
||||||
|
],
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
TESTS = ABBREV_TESTS + URL_TESTS + NUMBER_TESTS + PUNCT_TESTS + GENERAL_TESTS
|
||||||
TESTS = (ABBREV_TESTS + URL_TESTS + NUMBER_TESTS + PUNCT_TESTS + GENERAL_TESTS)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("text,expected_tokens", TESTS)
|
@pytest.mark.parametrize("text,expected_tokens", TESTS)
|
||||||
|
@ -149,4 +696,3 @@ def test_tr_tokenizer_handles_allcases(tr_tokenizer, text, expected_tokens):
|
||||||
token_list = [token.text for token in tokens if not token.is_space]
|
token_list = [token.text for token in tokens if not token.is_space]
|
||||||
print(token_list)
|
print(token_list)
|
||||||
assert expected_tokens == token_list
|
assert expected_tokens == token_list
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ from spacy.tokens import Doc
|
||||||
from spacy.pipeline._parser_internals.nonproj import projectivize
|
from spacy.pipeline._parser_internals.nonproj import projectivize
|
||||||
from spacy.pipeline._parser_internals.arc_eager import ArcEager
|
from spacy.pipeline._parser_internals.arc_eager import ArcEager
|
||||||
from spacy.pipeline.dep_parser import DEFAULT_PARSER_MODEL
|
from spacy.pipeline.dep_parser import DEFAULT_PARSER_MODEL
|
||||||
from spacy.pipeline._parser_internals.stateclass import StateClass
|
|
||||||
|
|
||||||
|
|
||||||
def get_sequence_costs(M, words, heads, deps, transitions):
|
def get_sequence_costs(M, words, heads, deps, transitions):
|
||||||
|
@ -59,7 +58,7 @@ def test_oracle_four_words(arc_eager, vocab):
|
||||||
["S"],
|
["S"],
|
||||||
["L-left"],
|
["L-left"],
|
||||||
["S"],
|
["S"],
|
||||||
["D"]
|
["D"],
|
||||||
]
|
]
|
||||||
assert state.is_final()
|
assert state.is_final()
|
||||||
for i, state_costs in enumerate(cost_history):
|
for i, state_costs in enumerate(cost_history):
|
||||||
|
@ -268,7 +267,9 @@ def test_oracle_bad_tokenization(vocab, arc_eager):
|
||||||
arc_eager.add_action(2, dep) # Left
|
arc_eager.add_action(2, dep) # Left
|
||||||
arc_eager.add_action(3, dep) # Right
|
arc_eager.add_action(3, dep) # Right
|
||||||
reference = Doc(Vocab(), words=gold_words, deps=gold_deps, heads=gold_heads)
|
reference = Doc(Vocab(), words=gold_words, deps=gold_deps, heads=gold_heads)
|
||||||
predicted = Doc(reference.vocab, words=["[", "catalase", "]", ":", "that", "is", "bad"])
|
predicted = Doc(
|
||||||
|
reference.vocab, words=["[", "catalase", "]", ":", "that", "is", "bad"]
|
||||||
|
)
|
||||||
example = Example(predicted=predicted, reference=reference)
|
example = Example(predicted=predicted, reference=reference)
|
||||||
ae_oracle_actions = arc_eager.get_oracle_sequence(example, _debug=False)
|
ae_oracle_actions = arc_eager.get_oracle_sequence(example, _debug=False)
|
||||||
ae_oracle_actions = [arc_eager.get_class_name(i) for i in ae_oracle_actions]
|
ae_oracle_actions = [arc_eager.get_class_name(i) for i in ae_oracle_actions]
|
||||||
|
|
|
@ -301,9 +301,7 @@ def test_block_ner():
|
||||||
assert [token.ent_type_ for token in doc] == expected_types
|
assert [token.ent_type_ for token in doc] == expected_types
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize("use_upper", [True, False])
|
||||||
"use_upper", [True, False]
|
|
||||||
)
|
|
||||||
def test_overfitting_IO(use_upper):
|
def test_overfitting_IO(use_upper):
|
||||||
# Simple test to try and quickly overfit the NER component - ensuring the ML models work correctly
|
# Simple test to try and quickly overfit the NER component - ensuring the ML models work correctly
|
||||||
nlp = English()
|
nlp = English()
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
# coding: utf8
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import hypothesis
|
import hypothesis
|
||||||
import hypothesis.strategies
|
import hypothesis.strategies
|
||||||
import numpy
|
import numpy
|
||||||
from spacy.vocab import Vocab
|
from spacy.vocab import Vocab
|
||||||
from spacy.language import Language
|
from spacy.language import Language
|
||||||
from spacy.pipeline import DependencyParser
|
|
||||||
from spacy.pipeline._parser_internals.arc_eager import ArcEager
|
from spacy.pipeline._parser_internals.arc_eager import ArcEager
|
||||||
from spacy.tokens import Doc
|
from spacy.tokens import Doc
|
||||||
from spacy.pipeline._parser_internals._beam_utils import BeamBatch
|
from spacy.pipeline._parser_internals._beam_utils import BeamBatch
|
||||||
|
@ -44,7 +40,7 @@ def docs(vocab):
|
||||||
words=["Rats", "bite", "things"],
|
words=["Rats", "bite", "things"],
|
||||||
heads=[1, 1, 1],
|
heads=[1, 1, 1],
|
||||||
deps=["nsubj", "ROOT", "dobj"],
|
deps=["nsubj", "ROOT", "dobj"],
|
||||||
sent_starts=[True, False, False]
|
sent_starts=[True, False, False],
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -77,10 +73,12 @@ def batch_size(docs):
|
||||||
def beam_width():
|
def beam_width():
|
||||||
return 4
|
return 4
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(params=[0.0, 0.5, 1.0])
|
@pytest.fixture(params=[0.0, 0.5, 1.0])
|
||||||
def beam_density(request):
|
def beam_density(request):
|
||||||
return request.param
|
return request.param
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def vector_size():
|
def vector_size():
|
||||||
return 6
|
return 6
|
||||||
|
@ -100,7 +98,9 @@ def scores(moves, batch_size, beam_width):
|
||||||
numpy.random.uniform(-0.1, 0.1, (beam_width, moves.n_moves))
|
numpy.random.uniform(-0.1, 0.1, (beam_width, moves.n_moves))
|
||||||
for _ in range(batch_size)
|
for _ in range(batch_size)
|
||||||
]
|
]
|
||||||
), dtype="float32")
|
),
|
||||||
|
dtype="float32",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_create_beam(beam):
|
def test_create_beam(beam):
|
||||||
|
@ -128,8 +128,6 @@ def test_beam_parse(examples, beam_width):
|
||||||
parser(doc)
|
parser(doc)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@hypothesis.given(hyp=hypothesis.strategies.data())
|
@hypothesis.given(hyp=hypothesis.strategies.data())
|
||||||
def test_beam_density(moves, examples, beam_width, hyp):
|
def test_beam_density(moves, examples, beam_width, hyp):
|
||||||
beam_density = float(hyp.draw(hypothesis.strategies.floats(0.0, 1.0, width=32)))
|
beam_density = float(hyp.draw(hypothesis.strategies.floats(0.0, 1.0, width=32)))
|
||||||
|
|
|
@ -4,14 +4,17 @@ from spacy.tokens.doc import Doc
|
||||||
from spacy.vocab import Vocab
|
from spacy.vocab import Vocab
|
||||||
from spacy.pipeline._parser_internals.stateclass import StateClass
|
from spacy.pipeline._parser_internals.stateclass import StateClass
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def vocab():
|
def vocab():
|
||||||
return Vocab()
|
return Vocab()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def doc(vocab):
|
def doc(vocab):
|
||||||
return Doc(vocab, words=["a", "b", "c", "d"])
|
return Doc(vocab, words=["a", "b", "c", "d"])
|
||||||
|
|
||||||
|
|
||||||
def test_init_state(doc):
|
def test_init_state(doc):
|
||||||
state = StateClass(doc)
|
state = StateClass(doc)
|
||||||
assert state.stack == []
|
assert state.stack == []
|
||||||
|
@ -19,6 +22,7 @@ def test_init_state(doc):
|
||||||
assert not state.is_final()
|
assert not state.is_final()
|
||||||
assert state.buffer_length() == 4
|
assert state.buffer_length() == 4
|
||||||
|
|
||||||
|
|
||||||
def test_push_pop(doc):
|
def test_push_pop(doc):
|
||||||
state = StateClass(doc)
|
state = StateClass(doc)
|
||||||
state.push()
|
state.push()
|
||||||
|
@ -33,6 +37,7 @@ def test_push_pop(doc):
|
||||||
assert state.stack == [0]
|
assert state.stack == [0]
|
||||||
assert 1 not in state.queue
|
assert 1 not in state.queue
|
||||||
|
|
||||||
|
|
||||||
def test_stack_depth(doc):
|
def test_stack_depth(doc):
|
||||||
state = StateClass(doc)
|
state = StateClass(doc)
|
||||||
assert state.stack_depth() == 0
|
assert state.stack_depth() == 0
|
||||||
|
|
|
@ -161,7 +161,7 @@ def test_attributeruler_score(nlp, pattern_dicts):
|
||||||
# "cat" is the only correct lemma
|
# "cat" is the only correct lemma
|
||||||
assert scores["lemma_acc"] == pytest.approx(0.2)
|
assert scores["lemma_acc"] == pytest.approx(0.2)
|
||||||
# no morphs are set
|
# no morphs are set
|
||||||
assert scores["morph_acc"] == None
|
assert scores["morph_acc"] is None
|
||||||
|
|
||||||
|
|
||||||
def test_attributeruler_rule_order(nlp):
|
def test_attributeruler_rule_order(nlp):
|
||||||
|
|
|
@ -201,13 +201,9 @@ def test_entity_ruler_overlapping_spans(nlp):
|
||||||
|
|
||||||
@pytest.mark.parametrize("n_process", [1, 2])
|
@pytest.mark.parametrize("n_process", [1, 2])
|
||||||
def test_entity_ruler_multiprocessing(nlp, n_process):
|
def test_entity_ruler_multiprocessing(nlp, n_process):
|
||||||
texts = [
|
texts = ["I enjoy eating Pizza Hut pizza."]
|
||||||
"I enjoy eating Pizza Hut pizza."
|
|
||||||
]
|
|
||||||
|
|
||||||
patterns = [
|
patterns = [{"label": "FASTFOOD", "pattern": "Pizza Hut", "id": "1234"}]
|
||||||
{"label": "FASTFOOD", "pattern": "Pizza Hut", "id": "1234"}
|
|
||||||
]
|
|
||||||
|
|
||||||
ruler = nlp.add_pipe("entity_ruler")
|
ruler = nlp.add_pipe("entity_ruler")
|
||||||
ruler.add_patterns(patterns)
|
ruler.add_patterns(patterns)
|
||||||
|
|
|
@ -159,8 +159,12 @@ def test_pipe_class_component_model():
|
||||||
"model": {
|
"model": {
|
||||||
"@architectures": "spacy.TextCatEnsemble.v2",
|
"@architectures": "spacy.TextCatEnsemble.v2",
|
||||||
"tok2vec": DEFAULT_TOK2VEC_MODEL,
|
"tok2vec": DEFAULT_TOK2VEC_MODEL,
|
||||||
"linear_model": {"@architectures": "spacy.TextCatBOW.v1", "exclusive_classes": False, "ngram_size": 1,
|
"linear_model": {
|
||||||
"no_output_layer": False},
|
"@architectures": "spacy.TextCatBOW.v1",
|
||||||
|
"exclusive_classes": False,
|
||||||
|
"ngram_size": 1,
|
||||||
|
"no_output_layer": False,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
"value1": 10,
|
"value1": 10,
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,7 @@ def test_incomplete_data():
|
||||||
assert doc[1].tag_ is "V"
|
assert doc[1].tag_ is "V"
|
||||||
assert doc[2].tag_ is "J"
|
assert doc[2].tag_ is "J"
|
||||||
|
|
||||||
|
|
||||||
def test_overfitting_IO():
|
def test_overfitting_IO():
|
||||||
# Simple test to try and quickly overfit the tagger - ensuring the ML models work correctly
|
# Simple test to try and quickly overfit the tagger - ensuring the ML models work correctly
|
||||||
nlp = English()
|
nlp = English()
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import pydantic
|
|
||||||
import pytest
|
import pytest
|
||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
from spacy.schemas import TokenPattern, TokenPatternSchema
|
from spacy.schemas import TokenPattern, TokenPatternSchema
|
||||||
|
|
|
@ -207,7 +207,7 @@ def test_create_nlp_from_pretraining_config():
|
||||||
config = Config().from_str(pretrain_config_string)
|
config = Config().from_str(pretrain_config_string)
|
||||||
pretrain_config = load_config(DEFAULT_CONFIG_PRETRAIN_PATH)
|
pretrain_config = load_config(DEFAULT_CONFIG_PRETRAIN_PATH)
|
||||||
filled = config.merge(pretrain_config)
|
filled = config.merge(pretrain_config)
|
||||||
resolved = registry.resolve(filled["pretraining"], schema=ConfigSchemaPretrain)
|
registry.resolve(filled["pretraining"], schema=ConfigSchemaPretrain)
|
||||||
|
|
||||||
|
|
||||||
def test_create_nlp_from_config_multiple_instances():
|
def test_create_nlp_from_config_multiple_instances():
|
||||||
|
@ -291,7 +291,6 @@ def test_serialize_parser(parser_config_string):
|
||||||
assert model.get_ref("lower").get_dim("nI") == 66
|
assert model.get_ref("lower").get_dim("nI") == 66
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_config_nlp_roundtrip():
|
def test_config_nlp_roundtrip():
|
||||||
"""Test that a config prduced by the nlp object passes training config
|
"""Test that a config prduced by the nlp object passes training config
|
||||||
validation."""
|
validation."""
|
||||||
|
|
|
@ -24,7 +24,7 @@ def parser(en_vocab):
|
||||||
"update_with_oracle_cut_size": 100,
|
"update_with_oracle_cut_size": 100,
|
||||||
"beam_width": 1,
|
"beam_width": 1,
|
||||||
"beam_update_prob": 1.0,
|
"beam_update_prob": 1.0,
|
||||||
"beam_density": 0.0
|
"beam_density": 0.0,
|
||||||
}
|
}
|
||||||
cfg = {"model": DEFAULT_PARSER_MODEL}
|
cfg = {"model": DEFAULT_PARSER_MODEL}
|
||||||
model = registry.resolve(cfg, validate=True)["model"]
|
model = registry.resolve(cfg, validate=True)["model"]
|
||||||
|
@ -41,7 +41,7 @@ def blank_parser(en_vocab):
|
||||||
"update_with_oracle_cut_size": 100,
|
"update_with_oracle_cut_size": 100,
|
||||||
"beam_width": 1,
|
"beam_width": 1,
|
||||||
"beam_update_prob": 1.0,
|
"beam_update_prob": 1.0,
|
||||||
"beam_density": 0.0
|
"beam_density": 0.0,
|
||||||
}
|
}
|
||||||
cfg = {"model": DEFAULT_PARSER_MODEL}
|
cfg = {"model": DEFAULT_PARSER_MODEL}
|
||||||
model = registry.resolve(cfg, validate=True)["model"]
|
model = registry.resolve(cfg, validate=True)["model"]
|
||||||
|
@ -66,7 +66,7 @@ def test_serialize_parser_roundtrip_bytes(en_vocab, Parser):
|
||||||
"update_with_oracle_cut_size": 100,
|
"update_with_oracle_cut_size": 100,
|
||||||
"beam_width": 1,
|
"beam_width": 1,
|
||||||
"beam_update_prob": 1.0,
|
"beam_update_prob": 1.0,
|
||||||
"beam_density": 0.0
|
"beam_density": 0.0,
|
||||||
}
|
}
|
||||||
cfg = {"model": DEFAULT_PARSER_MODEL}
|
cfg = {"model": DEFAULT_PARSER_MODEL}
|
||||||
model = registry.resolve(cfg, validate=True)["model"]
|
model = registry.resolve(cfg, validate=True)["model"]
|
||||||
|
@ -90,7 +90,7 @@ def test_serialize_parser_strings(Parser):
|
||||||
"update_with_oracle_cut_size": 100,
|
"update_with_oracle_cut_size": 100,
|
||||||
"beam_width": 1,
|
"beam_width": 1,
|
||||||
"beam_update_prob": 1.0,
|
"beam_update_prob": 1.0,
|
||||||
"beam_density": 0.0
|
"beam_density": 0.0,
|
||||||
}
|
}
|
||||||
cfg = {"model": DEFAULT_PARSER_MODEL}
|
cfg = {"model": DEFAULT_PARSER_MODEL}
|
||||||
model = registry.resolve(cfg, validate=True)["model"]
|
model = registry.resolve(cfg, validate=True)["model"]
|
||||||
|
@ -112,7 +112,7 @@ def test_serialize_parser_roundtrip_disk(en_vocab, Parser):
|
||||||
"update_with_oracle_cut_size": 100,
|
"update_with_oracle_cut_size": 100,
|
||||||
"beam_width": 1,
|
"beam_width": 1,
|
||||||
"beam_update_prob": 1.0,
|
"beam_update_prob": 1.0,
|
||||||
"beam_density": 0.0
|
"beam_density": 0.0,
|
||||||
}
|
}
|
||||||
cfg = {"model": DEFAULT_PARSER_MODEL}
|
cfg = {"model": DEFAULT_PARSER_MODEL}
|
||||||
model = registry.resolve(cfg, validate=True)["model"]
|
model = registry.resolve(cfg, validate=True)["model"]
|
||||||
|
|
|
@ -83,6 +83,7 @@ def test_PrecomputableAffine(nO=4, nI=5, nF=3, nP=2):
|
||||||
def test_prefer_gpu():
|
def test_prefer_gpu():
|
||||||
try:
|
try:
|
||||||
import cupy # noqa: F401
|
import cupy # noqa: F401
|
||||||
|
|
||||||
prefer_gpu()
|
prefer_gpu()
|
||||||
assert isinstance(get_current_ops(), CupyOps)
|
assert isinstance(get_current_ops(), CupyOps)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -92,17 +93,20 @@ def test_prefer_gpu():
|
||||||
def test_require_gpu():
|
def test_require_gpu():
|
||||||
try:
|
try:
|
||||||
import cupy # noqa: F401
|
import cupy # noqa: F401
|
||||||
|
|
||||||
require_gpu()
|
require_gpu()
|
||||||
assert isinstance(get_current_ops(), CupyOps)
|
assert isinstance(get_current_ops(), CupyOps)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
require_gpu()
|
require_gpu()
|
||||||
|
|
||||||
|
|
||||||
def test_require_cpu():
|
def test_require_cpu():
|
||||||
require_cpu()
|
require_cpu()
|
||||||
assert isinstance(get_current_ops(), NumpyOps)
|
assert isinstance(get_current_ops(), NumpyOps)
|
||||||
try:
|
try:
|
||||||
import cupy # noqa: F401
|
import cupy # noqa: F401
|
||||||
|
|
||||||
require_gpu()
|
require_gpu()
|
||||||
assert isinstance(get_current_ops(), CupyOps)
|
assert isinstance(get_current_ops(), CupyOps)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
|
@ -294,7 +294,7 @@ def test_partial_annotation(en_tokenizer):
|
||||||
# cats doesn't have an unset state
|
# cats doesn't have an unset state
|
||||||
if key.startswith("cats"):
|
if key.startswith("cats"):
|
||||||
continue
|
continue
|
||||||
assert scores[key] == None
|
assert scores[key] is None
|
||||||
|
|
||||||
# partially annotated reference, not overlapping with predicted annotation
|
# partially annotated reference, not overlapping with predicted annotation
|
||||||
ref_doc = en_tokenizer("a b c d e")
|
ref_doc = en_tokenizer("a b c d e")
|
||||||
|
@ -306,13 +306,13 @@ def test_partial_annotation(en_tokenizer):
|
||||||
example = Example(pred_doc, ref_doc)
|
example = Example(pred_doc, ref_doc)
|
||||||
scorer = Scorer()
|
scorer = Scorer()
|
||||||
scores = scorer.score([example])
|
scores = scorer.score([example])
|
||||||
assert scores["token_acc"] == None
|
assert scores["token_acc"] is None
|
||||||
assert scores["tag_acc"] == 0.0
|
assert scores["tag_acc"] == 0.0
|
||||||
assert scores["pos_acc"] == 0.0
|
assert scores["pos_acc"] == 0.0
|
||||||
assert scores["morph_acc"] == 0.0
|
assert scores["morph_acc"] == 0.0
|
||||||
assert scores["dep_uas"] == 1.0
|
assert scores["dep_uas"] == 1.0
|
||||||
assert scores["dep_las"] == 0.0
|
assert scores["dep_las"] == 0.0
|
||||||
assert scores["sents_f"] == None
|
assert scores["sents_f"] is None
|
||||||
|
|
||||||
# partially annotated reference, overlapping with predicted annotation
|
# partially annotated reference, overlapping with predicted annotation
|
||||||
ref_doc = en_tokenizer("a b c d e")
|
ref_doc = en_tokenizer("a b c d e")
|
||||||
|
@ -324,13 +324,13 @@ def test_partial_annotation(en_tokenizer):
|
||||||
example = Example(pred_doc, ref_doc)
|
example = Example(pred_doc, ref_doc)
|
||||||
scorer = Scorer()
|
scorer = Scorer()
|
||||||
scores = scorer.score([example])
|
scores = scorer.score([example])
|
||||||
assert scores["token_acc"] == None
|
assert scores["token_acc"] is None
|
||||||
assert scores["tag_acc"] == 1.0
|
assert scores["tag_acc"] == 1.0
|
||||||
assert scores["pos_acc"] == 1.0
|
assert scores["pos_acc"] == 1.0
|
||||||
assert scores["morph_acc"] == 0.0
|
assert scores["morph_acc"] == 0.0
|
||||||
assert scores["dep_uas"] == 1.0
|
assert scores["dep_uas"] == 1.0
|
||||||
assert scores["dep_las"] == 0.0
|
assert scores["dep_las"] == 0.0
|
||||||
assert scores["sents_f"] == None
|
assert scores["sents_f"] is None
|
||||||
|
|
||||||
|
|
||||||
def test_roc_auc_score():
|
def test_roc_auc_score():
|
||||||
|
@ -391,7 +391,7 @@ def test_roc_auc_score():
|
||||||
score.score_set(0.25, 0)
|
score.score_set(0.25, 0)
|
||||||
score.score_set(0.75, 0)
|
score.score_set(0.75, 0)
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
s = score.score
|
_ = score.score # noqa: F841
|
||||||
|
|
||||||
y_true = [1, 1]
|
y_true = [1, 1]
|
||||||
y_score = [0.25, 0.75]
|
y_score = [0.25, 0.75]
|
||||||
|
@ -402,4 +402,4 @@ def test_roc_auc_score():
|
||||||
score.score_set(0.25, 1)
|
score.score_set(0.25, 1)
|
||||||
score.score_set(0.75, 1)
|
score.score_set(0.75, 1)
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
s = score.score
|
_ = score.score # noqa: F841
|
||||||
|
|
|
@ -37,9 +37,17 @@ def init_nlp(config: Config, *, use_gpu: int = -1) -> "Language":
|
||||||
T = registry.resolve(config["training"], schema=ConfigSchemaTraining)
|
T = registry.resolve(config["training"], schema=ConfigSchemaTraining)
|
||||||
dot_names = [T["train_corpus"], T["dev_corpus"]]
|
dot_names = [T["train_corpus"], T["dev_corpus"]]
|
||||||
if not isinstance(T["train_corpus"], str):
|
if not isinstance(T["train_corpus"], str):
|
||||||
raise ConfigValidationError(desc=Errors.E897.format(field="training.train_corpus", type=type(T["train_corpus"])))
|
raise ConfigValidationError(
|
||||||
|
desc=Errors.E897.format(
|
||||||
|
field="training.train_corpus", type=type(T["train_corpus"])
|
||||||
|
)
|
||||||
|
)
|
||||||
if not isinstance(T["dev_corpus"], str):
|
if not isinstance(T["dev_corpus"], str):
|
||||||
raise ConfigValidationError(desc=Errors.E897.format(field="training.dev_corpus", type=type(T["dev_corpus"])))
|
raise ConfigValidationError(
|
||||||
|
desc=Errors.E897.format(
|
||||||
|
field="training.dev_corpus", type=type(T["dev_corpus"])
|
||||||
|
)
|
||||||
|
)
|
||||||
train_corpus, dev_corpus = resolve_dot_names(config, dot_names)
|
train_corpus, dev_corpus = resolve_dot_names(config, dot_names)
|
||||||
optimizer = T["optimizer"]
|
optimizer = T["optimizer"]
|
||||||
# Components that shouldn't be updated during training
|
# Components that shouldn't be updated during training
|
||||||
|
|
|
@ -10,7 +10,7 @@ from wasabi import Printer
|
||||||
|
|
||||||
from .example import Example
|
from .example import Example
|
||||||
from ..tokens import Doc
|
from ..tokens import Doc
|
||||||
from ..schemas import ConfigSchemaTraining, ConfigSchemaPretrain
|
from ..schemas import ConfigSchemaPretrain
|
||||||
from ..util import registry, load_model_from_config, dot_to_object
|
from ..util import registry, load_model_from_config, dot_to_object
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ def pretrain(
|
||||||
set_gpu_allocator(allocator)
|
set_gpu_allocator(allocator)
|
||||||
nlp = load_model_from_config(config)
|
nlp = load_model_from_config(config)
|
||||||
_config = nlp.config.interpolate()
|
_config = nlp.config.interpolate()
|
||||||
T = registry.resolve(_config["training"], schema=ConfigSchemaTraining)
|
|
||||||
P = registry.resolve(_config["pretraining"], schema=ConfigSchemaPretrain)
|
P = registry.resolve(_config["pretraining"], schema=ConfigSchemaPretrain)
|
||||||
corpus = dot_to_object(_config, P["corpus"])
|
corpus = dot_to_object(_config, P["corpus"])
|
||||||
corpus = registry.resolve({"corpus": corpus})["corpus"]
|
corpus = registry.resolve({"corpus": corpus})["corpus"]
|
||||||
|
|
|
@ -69,7 +69,7 @@ CONFIG_SECTION_ORDER = ["paths", "variables", "system", "nlp", "components", "co
|
||||||
|
|
||||||
logger = logging.getLogger("spacy")
|
logger = logging.getLogger("spacy")
|
||||||
logger_stream_handler = logging.StreamHandler()
|
logger_stream_handler = logging.StreamHandler()
|
||||||
logger_stream_handler.setFormatter(logging.Formatter('%(message)s'))
|
logger_stream_handler.setFormatter(logging.Formatter("%(message)s"))
|
||||||
logger.addHandler(logger_stream_handler)
|
logger.addHandler(logger_stream_handler)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user