Don't require the `--structure` argument.
{
private:
    UInt64 seed;
    MarkovModel markov_model;
public:
    StringModel(UInt64 seed_, MarkovModelParameters params_) : seed(seed_), markov_model(std::move(params_)) {}
    void train(const IColumn & column) override
    {
        const ColumnString & column_string = assert_cast<const ColumnString &>(column);
        size_t size = column_string.size();
        for (size_t i = 0; i < size; ++i)
        {
            StringRef string = column_string.getDataAt(i);
            markov_model.consume(string.data, string.size);
        }
    }
    void finalize() override
    {
        markov_model.finalize();
    }
    ColumnPtr generate(const IColumn & column) override