{"id":19646170,"url":"https://github.com/yoctol/seq2vec","last_synced_at":"2025-04-28T15:30:30.274Z","repository":{"id":69890871,"uuid":"82541076","full_name":"Yoctol/seq2vec","owner":"Yoctol","description":"Transform sequence of words into a fix-length representation vector","archived":false,"fork":false,"pushed_at":"2017-11-24T06:54:13.000Z","size":1713,"stargazers_count":66,"open_issues_count":7,"forks_count":8,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-05T09:11:29.337Z","etag":null,"topics":["keras","seq2vec-model"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Yoctol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-02-20T09:38:45.000Z","updated_at":"2025-03-27T09:08:07.000Z","dependencies_parsed_at":"2023-05-25T00:15:41.234Z","dependency_job_id":null,"html_url":"https://github.com/Yoctol/seq2vec","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yoctol%2Fseq2vec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yoctol%2Fseq2vec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yoctol%2Fseq2vec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yoctol%2Fseq2vec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Yoctol","download_url":"https://codeload.github.com/Yoctol/seq2vec/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251338500,"owners_count":21573568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keras","seq2vec-model"],"created_at":"2024-11-11T14:37:10.537Z","updated_at":"2025-04-28T15:30:29.818Z","avatar_url":"https://github.com/Yoctol.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# seq2vec 0.4.0\nTurn sequence of words into a fix-length representation vector\n\nThis is a version to refactor all the seq2vec structures and use customed layers in yklz.\n\n## Install\n```\npip install seq2vec\n```\nor clone the repo, then install:\n```\ngit clone --recursive https://github.com/Yoctol/seq2vec.git\npython setup.py install\n```\n\n\n## Usage\n\nSimple hash:\n```python\nfrom seq2vec import Seq2VecHash\n\ntransformer = Seq2VecHash(vector_length=100)\nseqs = [\n    ['我', '有', '一個', '蘋果'],\n    ['我', '有', 'pineapple'],\n]\nresult = transformer.transform(seqs)\nprint(result)\n'''\narray([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],\n       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])\n'''\n```\n\nSequence-to-sequence auto-encoder:\n\n* LSTM to LSTM auto-encoder with word embedding (RNN to RNN architecture)\n\n  ```python\n  from seq2vec.word2vec import GensimWord2vec\n  from seq2vec import Seq2VecR2RWord\n  \n  # load Gensim word2vec from word2vec_model_path\n  word2vec = GensimWord2vec(word2vec_model_path)\n  \n  transformer = Seq2VecR2RWord(\n        word2vec_model=word2vec,\n        max_length=20,\n        latent_size=300,\n        encoding_size=300,\n        learning_rate=0.05\n  )\n  \n  train_seq = [\n    ['我', '有', '一個', '蘋果'],\n    ['我', '有', '筆'],\n    ['一個', '鳳梨'],\n  ]\n  test_seq = [\n    ['我', '愛', '吃', '鳳梨'],\n  ]\n  transformer.fit(train_seq)\n  result = transformer.transform(test_seq)\n  ```\n  \n* CNN to LSTM auto-encoder with word embedding (CNN to RNN architecture)\n\n  ```python\n  from seq2vec.word2vec import GensimWord2vec\n  from seq2vec import Seq2VecC2RWord\n  \n  # load Gensim word2vec from word2vec_model_path\n  word2vec = GensimWord2vec(word2vec_model_path)\n  \n  transformer = Seq2VecC2RWord(\n        word2vec_model=word2vec,\n        max_length=20,\n        latent_size=300,\n        conv_size=5,\n        channel_size=10,\n        learning_rate=0.05,\n  )\n  \n  train_seq = [\n    ['我', '有', '一個', '蘋果'],\n    ['我', '有', '筆'],\n    ['一個', '鳳梨'],\n  ]\n  test_seq = [\n    ['我', '愛', '吃', '鳳梨'],\n  ]\n  transformer.fit(train_seq)\n  result = transformer.transform(test_seq)\n  ```\n\n* CNN to LSTM auto-encoder with char embedding (CNN to RNN architecture)\n\n  ```python\n  from seq2vec.word2vec import GensimWord2vec\n  from seq2vec import Seq2VecC2RChar\n  \n  # load Gensim word2vec from word2vec_model_path\n  word2vec = GensimWord2vec(word2vec_model_path)\n  \n  transformer = Seq2VecC2RChar(\n        word2vec_model=word2vec,\n        max_index=1000,\n        max_length=20,\n        embedding_size=200,\n        latent_size=200,\n        learning_rate=0.05,\n        channel_size=10,\n        conv_size=5\n  )\n  \n  train_seq = [\n    ['我', '有', '一個', '蘋果'],\n    ['我', '有', '筆'],\n    ['一個', '鳳梨'],\n  ]\n  test_seq = [\n    ['我', '愛', '吃', '鳳梨'],\n  ]\n  transformer.fit(train_seq)\n  result = transformer.transform(test_seq)\n  ```\n  \n* LSTM to LSTM auto-encoder with hash word embedding (RNN to RNN architecture)\n\n ```python\n from seq2vec import Seq2VecR2RHash\n\n transformer = Seq2VecR2RHash(\n     max_index=1000,\n     max_length=10,\n     latent_size=20,\n     embedding_size=200,\n     encoding_size=300,\n     learning_rate=0.05\n )\n\n train_seq = [\n     ['我', '有', '一個', '蘋果'],\n     ['我', '有', '筆'],\n     ['一個', '鳳梨'], \n ]\n test_seq = [\n     ['我', '愛', '吃', '鳳梨'],\n ]\n transformer.fit(train_seq)\n result = transformer.transform(test_seq)\n ```\n\n### Training with generator on file\n\nWe provide an example with LSTM to LSTM auto-encoder (word embedding).\n\nUse the following training method while lack of memory is an issue for you.\n\nThe file should be a tokenized txt file splitted by whitespace with a sequence\nper line.\n\n```python\nfrom seq2vec.word2vec import GensimWord2vec\n\nfrom seq2vec.model import Seq2VecR2RWord\nfrom seq2vec.transformer import WordEmbeddingTransformer\nfrom seq2vec.util import DataGenterator\n\nword2vec = GensimWord2vec(word2vec_model_path)\nmax_length = 20\n\ntransformer = Seq2VecR2RWord(\n    word2vec_model=word2vec,\n    max_length=max_length,\n    latent_size=200,\n    encoding_size=300,\n    learning_rate=0.05\n)\n\ntrain_data = DataGenterator(\n    corpus_for_training_path, \n    transformer.input_transformer,\n    transformer.output_transformer, \n    batch_size=128\n)\ntest_data = DataGenterator(\n    corpus_for_validation_path, \n    transformer.input_transformer,\n    transformer.output_transformer, \n    batch_size=128\n)\n\ntransformer.fit_generator(\n    train_data,\n    test_data,\n    epochs=10,\n    batch_number=1250 # The number of batch per epoch\n)\n\ntransformer.save_model(model_path) # save your model\n\n# You can reload your model and retrain it.\ntransformer.load_model(model_path)\ntransformer.fit_generator(\n    train_data,\n    test_data,\n    epochs=10,\n    batch_number=1250 # The number of batch per epoch\n)\n```\n\n### Customized your seq2vec model with our auto-encoder framework\n\nYou can customize your seq2vec model easily with our framework.\n\n```python\nimport keras\nfrom seq2vec.model import TrainableSeq2VecBase\n\nclass YourSeq2Vec(TrainableSeq2VecBase):\n\n   def __init__(self\n      max_length,\n      latent_size,\n      learning_rate\n   ):\n      # initialize your setting and set input_transformer\n      # and output_transformer\n      # Input and output transformers transform data from \n      # raw sequence into Keras Layer input format\n      # See seq2vec.transformer for more detail\n\n      self.input_transformer = YourInputTransformer()\n      self.output_transformer = YourOutputTransformer()\n\n      # add your customized layer\n      self.custom_objects = {}\n      self.custom_objects[customized_class_name] = customized_class\n\n      super(YourSeq2Vec, self).__init__(\n         max_length,\n         latent_size,\n         learning_rate\n      )\n\n   def create_model(self):\n      # create and compile your model in this function\n      # You should return your model and encoder here\n      # encoder is the one encoded input sequences\n\n      model.compile(loss)\n      return model, encoder\n\n   def load_model(self, file_path):\n      # load your seq2vec model here and set its attribute values\n      self.model = self.load_customed_model(file_path)\n```\n\n## Lint\n```\npylint --rcfile=./yoctol-pylintrc/.pylintrc seq2vec\n```\n\n\n## Test\n```\npython -m unittest\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoctol%2Fseq2vec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoctol%2Fseq2vec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoctol%2Fseq2vec/lists"}